我有一项任务是解决我们的产品安装程序的问题,并最终陷入死胡同而没有任何想法。
安装过程如下:
[Run]
部分所以问题是Shroedinger的问题 - 在某些机器上,在配置器中取消安装后出现意外重启,没有任何问题。当然那令人烦恼的用户。
我无法弄清楚机器决定重启的标准,但我偶然发现了这件事:
在[Run]
部分
Filename: "stub.exe"; Flags: runhidden skipifdoesntexist; BeforeInstall: ConfigureService
然后在[Code]
中,如果配置程序返回错误的退出代码,则ConfigureService
会调用InstallationAbort
proc。
接下来,在InstallationAbort
:
Exec(ExpandConstant('{uninstallexe}'), '/VERYSILENT /noinstancecheck', '', SW_HIDE,
ewWaitUntilTerminated, ErrorCode);
因此作者要求在安装程序中安装卸载程序。 使用我确定的日志,安装程序在卸载程序完成工作后不会结束!它正在进入下一步(安装完成)!之后我可以在日志中看到
需要重启吗?是
注意:如果没有取消配置器,系统永远不会重新启动,即安装完成正确。
所以我尝试了:
/NORESTART
添加到卸载程序Exec
。没有帮助。我认为这是因为它的安装人员决定重新启动。WizardForm.CancelButton.OnClick(WizardForm.CancelButton);
和其他一些调用以退出设置。没帮助。NeedRestart
函数以在取消时返回false 正如我试图理解的那样,作者因为需要删除已安装的服务而调用卸载程序(即使用特殊参数在UninstallRun
中调用它们)
所以,我的主要问题:从[Run]
部分调用的代码调用卸载程序,撤消[Run]
中所做的更改是否正常?
答案 0 :(得分:0)
通常是从
[Run]
部分调用的代码调用卸载程序来撤消[Run]
中所做的更改吗?
一般来说,这不是一种常见做法。不应该在Run
部分中止安装。 Inno Setup不是为处理它而设计的。
但如果你需要,那就别无他法了。您拥有的代码很可能基于此:
How to force Inno Setup setup to fail when Run command fails?
但这并不意味着安装程序应该需要重启。安装程序和卸载程序之间存在一些冲突。