如何根据外部应用程序的返回代码强制重启?

时间:2013-01-16 12:34:50

标签: inno-setup

如果外部应用程序返回退出代码5,我可以以某种方式强制重启吗?

[Run]
Filename: {app}\e.exe; Parameters: Z; Description: {cm:ALaunchProgram,{#ti}};

如果无法使用RUN部分,我可以在哪里调用ShellExec,以便在后期阶段运行可执行文件。

1 个答案:

答案 0 :(得分:6)

无法从[Run]条目触发重新启动,除非执行的文件执行Inno可以自动检测需要重新启动的内容(例如安排在重新启动时替换或删除文件)。这是通过RestartIfNeededByRun设置控制的,默认设置为yes

如果您希望能够捕获返回值并使用它做一些有趣的事情,则必须使用[Code]。如果您必须在安装后执行此操作,则建议的位置为CurStepChanged(ssPostInstall)(实际上在[Run]条目通常执行后会发生。)

此时,您可以使用Exec运行程序并检查退出代码,可选择设置一些全局变量,指示是否要重新启动。然后,您可以在NeedRestart事件函数中使用该值。

然而,在沿着这条路走下去之前,如果您尝试运行的东西实际上是某种先决条件组件,那么您应该强烈考虑从PrepareToInstall安装它。 Inno包含了一个这方面的示例,包括在必备安装和主应用程序安装之间触发重新启动的示例。