[英]Inno Setup: Calling uninstaller while in setup - is that a proper way to rollback?
我有一个任务是解决我们的产品安装程序的问题,并最终走到了死胡同,没有任何想法。
安装过程如下:
[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]
更改是否正常?
从
[Run]
部分调用的代码调用卸载程序,撤消在[Run]
更改是否正常?
一般来说,这不是一种常见的做法。 不应该在Run
部分中止安装。 Inno Setup不是为处理它而设计的。
但如果你需要,别无他法。 您拥有的代码很可能基于此:
当Run命令失败时,如何强制Inno Setup设置失败?
但这并不意味着安装程序应该需要重启。 安装程序和卸载程序之间存在一些冲突。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.