Inno setup 如何使用Inno Setup提示用户阅读指南并在完成的页面上重新启动/注销计算机?

Inno setup 如何使用Inno Setup提示用户阅读指南并在完成的页面上重新启动/注销计算机?,inno-setup,pascalscript,Inno Setup,Pascalscript,我正在构建一个安装程序,并希望用户使用单选按钮重新启动。我还想包括一个选项,如果用户选择“否,我将稍后重新启动”,则可以打开用户指南。我目前要求用户打开用户指南的方法是将其放入[Run]部分,如下所示: [Run] Filename: "{app}\userguide.pdf"; Description: "View the User Guide"; Flags: shellexec runasoriginaluser postinstall nowait

我正在构建一个安装程序,并希望用户使用单选按钮重新启动。我还想包括一个选项,如果用户选择“否,我将稍后重新启动”,则可以打开用户指南。我目前要求用户打开用户指南的方法是将其放入
[Run]
部分,如下所示:

[Run]
Filename: "{app}\userguide.pdf"; Description: "View the User Guide"; Flags: shellexec runasoriginaluser postinstall nowait unchecked
这工作得很好,它甚至可以在默认的PDF查看器中打开。但是,每当我尝试包含重新启动选项时,它都会覆盖用户指南选项并将其完全删除。因此,尝试:

[Code]
function NeedRestart(): Boolean;
begin
    Result := True;
end;
以及:

[Setup]
AlwaysRestart=yes

从某种意义上讲,它们包括重新启动选项,但也覆盖了用户指南按钮。有没有办法制作一个自定义页面,在选中“No I will restart later”单选按钮后,该页面将显示打开用户指南的选项?我不太熟悉使用Inno设置和Delphi/Pascal。

你必须编写代码。例如,您可以添加自己的复选框以启动用户指南:

[Setup]
AlwaysRestart=yes

[Files]
Source: "userguide.pdf"; DestDir: "{app}"
[代码]
变量
启动复选框:TCheckbox;
程序YesNoRadioClick(发送方:ToObject);
开始
//选择“重新启动”时禁用用户指南复选框
LaunchCheckbox.Enabled:=WizardForm.NoRadio.Checked;
结束;
过程初始化Wizard();
开始
LaunchCheckbox:=TCheckbox.Create(WizardForm.FinishedPage);
启动复选框。标题:=“查看用户指南”;
LaunchCheckbox.Checked:=False;
LaunchCheckbox.Left:=WizardForm.YesRadio.Left;
LaunchCheckbox.Width:=WizardForm.YesRadio.Width;
LaunchCheckbox.Height:=ScaleY(LaunchCheckbox.Height);
LaunchCheckbox.Parent:=WizardForm.FinishedPage;
如果(WizardForm.YesRadio.OnClick nil)或(WizardForm.NoRadio.OnClick nil),则
开始
日志('意外设置重新启动单选按钮事件处理程序');
结束
其他的
开始
WizardForm.YesRadio.OnClick:=@YesNoRadioClick;
WizardForm.NoRadio.OnClick:=@yesnoradioclick;
结束;
结束;
过程CurPageChanged(CurPageID:Integer);
开始
如果CurPageID=wpFinished,则
开始
//调整至重新启动选择的初始开始
YesNoRadioClicked(无);
//直到现在,重新启动单选按钮才具有其确定的垂直位置
启动复选框。顶部:=
WizardForm.NoRadio.Top+WizardForm.NoRadio.Height+ScaleY(16);
结束;
结束;
过程CurStepChanged(CurStep:TSetupStep);
变量
错误代码:整数;
开始
如果CurStep=ssDone,则
开始
如果(非静音)和
(不是WizardForm.YesRadio.Checked)和
启动复选框。然后选中
开始
日志(“打开用户指南”);
ShellExecutaOriginalUser(
'打开',ExpandConstant('{app}\userguide.pdf'),'',SW_SHOWNORMAL,
ewNoWait,错误代码);
结束;
结束;
结束;


该代码假定
始终重新启动
。如果重新启动是有条件的,则当不需要重新启动时,代码将需要更新以适应完成页面的不同布局。有关完整解决方案,请参阅我的WinSCP安装程序:

我已经编辑了用于您的问题的标记,因为它与Delphi或Pascal无关。Inno安装程序使用Pascalscript作为其脚本语言,因此除非您直接使用Inno安装程序本身的源代码,否则您不会使用Delphi或Pascal。请只使用真正适用于您的问题标签-标签在这里具有相关性和意义。谢谢。为什么安装后需要重新启动?谢谢,这很好用!