标签: pascalscript

Inno Setup 运行部分的简单进度页面

我的安装程序非常简单,基本上是:

  1. 欢迎页面
  2. 进度页
  3. 最后一页

欢迎页面和最后页面是标准的(只需一个按钮)。在“进度”页面上,我正在静默安装一堆其他程序。

实际的脚本正在安装“[Run]”部分中的每个程序。
问题是进度条达到 100% 后就停留在那里。
我只能更改消息文本。

我想要实现的是使用 Pascal Script 来显示进度(因为它可以让我有更多的灵活性),例如:

procedure InitializeWizard;
begin
  ProgressPage.SetProgress(1, 100);
  exec(.......)
  ProgressPage.SetProgress(15, 100);
  exec(.......)
  ProgressPage.SetProgress(40, 100);
  ...
  ...
end;
Run Code Online (Sandbox Code Playgroud)

这样我就可以显示更准确的进度条。这就是我所拥有的(模拟安装。取自示例):

[Code]

var
  ProgressPage: TOutputProgressWizardPage;

procedure InitializeWizard;
begin
  ProgressPage := CreateOutputProgressPage('My App','');
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
  I: Integer;
begin
  if CurPageID = wpWelcome then begin
    ProgressPage.SetText('Starting installation...', '');
    ProgressPage.SetProgress(0, 0);
    ProgressPage.Show;
    try
      for I := 0 to 10 do begin
        ProgressPage.SetProgress(I, 10);
        Sleep(100);
      end;
    finally
      ProgressPage.Hide;
    end;
  end else
    Result …
Run Code Online (Sandbox Code Playgroud)

inno-setup pascalscript progress-bar

3
推荐指数
1
解决办法
9638
查看次数

如何在 Inno Setup 中在安装和卸载时使用具有依赖项的 DLL?

我想在卸载应用程序时在我的 .iss 中导入两个 dll。我找不到办法做到这一点。

procedure Installed();
external 'Installed@files:StatisticInstallInfo.dll,adcore.dll cdecl  setuponly ';

procedure Uninstalled();
external 'Uninstalled@{app}\StatisticInstallInfo.dll cdecl  uninstallonly';
Run Code Online (Sandbox Code Playgroud)

我也想adcore.dll在程序中导入Uninstalled。它失败了,如下所示;

[Files]
Source: {#MyDefaultPackDir}\adcore.dll; DestDir: "{app}"
Source: {#MyDefaultPackDir}\StatisticInstallInfo.dll; DestDir: "{app}"
Run Code Online (Sandbox Code Playgroud)
[Files]
Source: {#MyDefaultPackDir}\adcore.dll; DestDir: "{app}"
Source: {#MyDefaultPackDir}\StatisticInstallInfo.dll; DestDir: "{app}"
Run Code Online (Sandbox Code Playgroud)

这是行不通的。

Installed()并且Uninstalled()在 中StatisticInstallInfo.dll,这取决于adcore.dll

dll inno-setup pascalscript

3
推荐指数
1
解决办法
1908
查看次数

使用 Inno Setup 中的缓冲区调用 DLL 函数 (GetPrivateProfileSection)

我想使用GetPrivateProfileSection(从 Windows Kernel32.dll)Inno Setup 脚本,它是一种 Delphi (Pascal) 程序。

但我不知道如何创建缓冲区(该缓冲区是函数中的 Out 参数)以及它在哪里放置我想要检索的有用信息。

dll inno-setup pascalscript

3
推荐指数
1
解决办法
1267
查看次数

如何在 Inno Setup 中检查 64/32 位

我想进入一个文件夹。如果是 32 位,则为64Program Files (x86)位。Program Files如何在 Inno 设置中做到这一点。

这是我尝试过的代码(但没有运气):

procedure CurUninstallStepChanged (CurUninstallStep: TUninstallStep);
var
  mres : integer;
begin
  case CurUninstallStep of
    usPostUninstall:
      begin
        mres := MsgBox('Do you want to delete saved games?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2)
        if mres = IDYES then
          if ProcessorArchitecture = paIA64 then
            begin
               if IsWin64 then
                DelTree(ExpandConstant('{userappdata}\Local\VirtualStore\Program Files (x86)\MY PROJECT'), True, True, True);
          else
                DelTree(ExpandConstant('{userappdata}\Local\VirtualStore\Program Files\MY PROJECT'), True, True, True);
          end;
      end;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

windows inno-setup 32bit-64bit pascalscript

3
推荐指数
1
解决办法
2882
查看次数

Pascal Script 中的全局变量是否为零初始化?

当我在 Inno Setup 脚本的部分(Pascal Script)中声明全局变量时[Code],它是否会自动初始化为零/空值?或者我是否必须显式初始化它(例如在InitializeSetup事件函数中)?

var
  GlobalNumber: Integer;

function InitializeSetup(): Boolean;
begin
  // Is this necessary?
  GlobalNumber := 0;

  Result := True;
end;
Run Code Online (Sandbox Code Playgroud)

根据我的经验,变量是零初始化的。不过,我不确定我是否只是运气不好。

我已经对测试代码进行了 10,000 次迭代。全局变量(或各种类型,整数,字符串,指针)始终为零初始化。

inno-setup pascalscript

3
推荐指数
1
解决办法
1116
查看次数

使用文件部分中自定义页面中的两个/多个选定目录

我需要创建两个目的地的自定义页面。

我已经搞定了:

#define MyAppName "TESTPROG"
[Setup]

AppName={#MyAppName}
DefaultDirName=C:\test\{#MyAppName}
DefaultGroupName={#MyAppName}

[Code]
var
  Page: TInputDirWizardPage;
  DataDir: String;

procedure InitializeWizard;
begin
  Page := CreateInputDirPage(wpWelcome,
    'Select Personal Data Location', 'Where should personal data files be stored?',
    'Personal data files will be stored in the following folder.'#13#10#13#10 +
    'To continue, click Next. ' +
      'If you would like to select a different folder, click Browse.',
    False, 'New Folder');

  Page.Add('Local APP');
  Page.Add('Local Storage');

  Page.Values[0] := ('C:\My Program');
  Page.Values[1] := ('D:\My Program');

  DataDir := Page.Values[0]; 
end;
Run Code Online (Sandbox Code Playgroud)

我需要知道如何以及在哪里设置 …

inno-setup pascalscript

3
推荐指数
1
解决办法
3033
查看次数

Inno Setup:自定义类

Inno Setup 是否允许在“type”关键字之后创建自己的类?我尝试从 TBitmapImage 继承:

[Code]
type
    TBitmapButton = class(TBitmapImage)
        property OnHoverImage: TAlphaBitmap;
        procedure Hovering(IsHovered: Boolean);
    end;
Run Code Online (Sandbox Code Playgroud)

但编译器在类声明的开头表示“需要标识符”。

inno-setup pascalscript

3
推荐指数
1
解决办法
1186
查看次数

如何在 Inno Setup TNewCheckListBox 中获取复选框或单选按钮的值?

我认为这很容易编码,但事实是我最终面临着获取TNewCheckListBox.

我尝试将复选框和单选按钮设置为全局实例,以便我可以在NextButtonClick事件中轻松访问它。

但在这个示例测试中我得到

无法调用过程。

[Code]
var
  PageChoixComposants: TWizardPage;
  CB1, CB2: TNewCheckBox;
  OB1, OB2: TNewRadioButton; 

procedure InitializeWizard;
var
  CheckListBox: TNewCheckListBox;
begin
  PageChoixComposants := CreateCustomPage(
    wpWelcome, 'Custom wizard page controls', 'TNewCheckListBox');

  CheckListBox := TNewCheckListBox.Create(PageChoixComposants);
  CheckListBox.Width := PageChoixComposants.SurfaceWidth;
  CheckListBox.Height := ScaleY(97);
  CheckListBox.Flat := True;
  CheckListBox.Parent := PageChoixComposants.Surface;
  CB1 := CheckListBox.AddCheckBox('CB1', '', 0, True, True, False, True, nil);
  OB1 := CheckListBox.AddRadioButton('CB1 OB1', '', 1, True, True, nil);
  OB2 := CheckListBox.AddRadioButton('CB1 OB2', '', 1, False, True, nil);
  CB2 := CheckListBox.AddCheckBox('CB2', '', …
Run Code Online (Sandbox Code Playgroud)

checkbox inno-setup checkboxlist radio-button pascalscript

3
推荐指数
1
解决办法
2458
查看次数

如何在 Inno Setup 卸载程序中创建 OuterNotebook/欢迎页面?

我正在使用 Martin Prikryl 对Custom Inno Setup Uninstall page (not MsgBox)的回答中的代码。

如何修改此代码的第一页以在页面上显示类似“欢迎”的页面OuterNotebook(即没有MainPanel标题)?

inno-setup pascalscript

3
推荐指数
1
解决办法
1743
查看次数

如何在 Inno Setup 中执行卸载时的批处理文件?

我正在使用Inno Setup 响应中如何执行命令行工具而不使用批处理文件中的代码来执行安装时的所有批处理文件(之前、之后)。

现在我想在用户单击“是”卸载程序时执行它们,但找不到方法。在确认之前执行

这是我的部分代码[Code]

function InitializeUninstall(): Boolean;
var
  ResultCode : Integer;    
begin
  Result := True;
  Exec(ExpandConstant('{app}\scripts\unset.bat'), '', '',
       SW_HIDE, ewWaitUntilTerminated, ResultCode); 
end;
Run Code Online (Sandbox Code Playgroud)

cmd inno-setup batch-file pascalscript

3
推荐指数
1
解决办法
3763
查看次数