我的安装程序非常简单,基本上是:
欢迎页面和最后页面是标准的(只需一个按钮)。在“进度”页面上,我正在静默安装一堆其他程序。
实际的脚本正在安装“[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) 我想在卸载应用程序时在我的 .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。
我想使用GetPrivateProfileSection(从 Windows Kernel32.dll)Inno Setup 脚本,它是一种 Delphi (Pascal) 程序。
但我不知道如何创建缓冲区(该缓冲区是函数中的 Out 参数)以及它在哪里放置我想要检索的有用信息。
我想进入一个文件夹。如果是 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) 当我在 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 次迭代。全局变量(或各种类型,整数,字符串,指针)始终为零初始化。
我需要创建两个目的地的自定义页面。
我已经搞定了:
#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 是否允许在“type”关键字之后创建自己的类?我尝试从 TBitmapImage 继承:
[Code]
type
TBitmapButton = class(TBitmapImage)
property OnHoverImage: TAlphaBitmap;
procedure Hovering(IsHovered: Boolean);
end;
Run Code Online (Sandbox Code Playgroud)
但编译器在类声明的开头表示“需要标识符”。
我认为这很容易编码,但事实是我最终面临着获取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) 我正在使用 Martin Prikryl 对Custom Inno Setup Uninstall page (not MsgBox)的回答中的代码。
如何修改此代码的第一页以在页面上显示类似“欢迎”的页面OuterNotebook(即没有MainPanel标题)?
我正在使用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) inno-setup ×10
pascalscript ×10
dll ×2
32bit-64bit ×1
batch-file ×1
checkbox ×1
checkboxlist ×1
cmd ×1
progress-bar ×1
radio-button ×1
windows ×1