Installation 如何在Inno安装程序的安装后强制重新启动

Installation 如何在Inno安装程序的安装后强制重新启动,installation,inno-setup,pascalscript,Installation,Inno Setup,Pascalscript,在我的设置中,我必须安装一个外部驱动程序。 在一些罕见的情况下,安装失败,我必须删除旧的驱动程序并重新启动,然后才能重试 我在ssPostInstall中安装了外部驱动程序 过程CurStepChanged(CurStep:TSetupStep); 开始 如果CurStep=ssPostInstall,则 开始 如果Exec(ExpandConstant({app}\external.exe')、'-install'、'',SW_SHOW, EWWAIT未过滤,结果代码)然后 开始 {必要时处理

在我的设置中,我必须安装一个外部驱动程序。
在一些罕见的情况下,安装失败,我必须删除旧的驱动程序并重新启动,然后才能重试

我在
ssPostInstall
中安装了外部驱动程序

过程CurStepChanged(CurStep:TSetupStep);
开始
如果CurStep=ssPostInstall,则
开始
如果Exec(ExpandConstant({app}\external.exe')、'-install'、'',SW_SHOW,
EWWAIT未过滤,结果代码)然后
开始
{必要时处理成功;ResultCode包含退出代码}
结束
否则开始
{必要时处理失败;ResultCode包含错误代码}
bReboot:=真;
结束;
结束;
函数NeedRestart():Boolean;
开始
结果:=bReboot;
结束;
不幸的是,这不起作用,因为在
ssPostInstall
之前调用了
NeedRestart

是否有其他方法触发重新启动?
我不想设置
AlwaysRestart=yes


我可以弹出一个
MsgBox
来通知用户并告诉他们该怎么做。但是如果能在安装过程中自动处理,那就更好了。

您可以更快地完成安装。例如,在安装了
external.exe
之后,立即使用:

[代码]
程序驱动程序;
开始
如果Exec(ExpandConstant({app}\external.exe')、'-install'、'',SW_SHOW,
EWWAIT未过滤,结果代码)然后
开始
{必要时处理成功;ResultCode包含退出代码}
结束
其他的
开始
{必要时处理失败;ResultCode包含错误代码}
bReboot:=真;
结束;
结束;

另一个选项是使用
ssInstall
step(甚至)并使用以编程方式提取文件



顺便说一句,如果
external.exe
只是一个安装程序,您可能需要将其“安装”到
{tmp}
(以使其自动删除)。

谢谢-这很有效。我以后还需要exe,所以我不能删除它。
[Files]
Source: "external.exe"; DestDir: "{app}"; AfterInstall: InstallDriver