Inno setup Inno安装程序:在安装过程中调用卸载程序-这是回滚的正确方法吗?

Inno setup Inno安装程序:在安装过程中调用卸载程序-这是回滚的正确方法吗?,inno-setup,Inno Setup,我有一项任务要解决我们的产品安装程序的问题,但最终却毫无头绪地走到了死胡同 安装过程如下所示: 安装文件 在[Run]部分中配置一些服务 运行我们的定制产品配置程序 如果步骤3成功(configurator返回正确的退出代码),则启动这些服务 else回滚安装 所以问题是Shroedinger的——在一些机器上,在取消configurator中的安装后出现了意外的重新启动,没有任何问题。当然,这激怒了用户 我无法确定机器决定重新启动的标准,但我偶然发现了这件事: 在[Run]部分 Filenam

我有一项任务要解决我们的产品安装程序的问题,但最终却毫无头绪地走到了死胡同

安装过程如下所示:

  • 安装文件
  • [Run]
    部分中配置一些服务
  • 运行我们的定制产品配置程序
  • 如果步骤3成功(configurator返回正确的退出代码),则启动这些服务
  • else回滚安装
  • 所以问题是Shroedinger的——在一些机器上,在取消configurator中的安装后出现了意外的重新启动,没有任何问题。当然,这激怒了用户

    我无法确定机器决定重新启动的标准,但我偶然发现了这件事:

    [Run]
    部分

    Filename: "stub.exe"; Flags: runhidden skipifdoesntexist; BeforeInstall: ConfigureService
    
    然后在
    [code]
    中,
    ConfigureService
    调用
    InstallationAbort
    proc,前提是配置程序返回了错误的退出代码

    接下来,在安装中止中:

    Exec(ExpandConstant({uninstallexe}'),'/VERYSILENT/noinstancecheck','',SW_HIDE,
    EWWAIT未过滤,错误代码);
    
    因此,作者在安装程序中调用卸载程序。 使用我确定的日志,安装程序不会在卸载程序完成工作后结束!正在进入下一步(安装完成)!之后我可以在日志中看到

    需要重启吗?对

    注意:如果未取消configurator,即安装以正确的方式完成,则系统不会重新启动

    所以我试着:

    • /NORESTART
      添加到卸载程序
      Exec
      调用。没用。我想这是因为是安装人员决定重新启动
    • 添加
      WizardForm.CancelButton.OnClick(WizardForm.CancelButton)和其他一些调用退出安装程序。没用
    • 覆盖
      需要重新启动
      函数,以便在取消时返回false
    正如我试图理解的,作者调用卸载程序是因为需要删除已安装的服务(即使用特殊参数在
    UninstallRun
    中调用它们)

    所以,我的主要问题是:从
    [Run]
    部分调用的代码调用卸载程序,以撤消在
    [Run]
    中所做的更改,这是正常的做法吗

    [Run]
    部分调用的代码调用卸载程序,以撤消在
    [Run]
    中所做的更改,这是正常的做法吗

    一般来说,这不是一种常见的做法。不应在
    Run
    部分中止安装。Inno安装程序并不是为处理这个问题而设计的

    但是如果你需要的话,没有别的办法了。您的代码很可能基于以下内容:


    但这并不意味着安装程序需要重新启动。安装程序和卸载程序之间存在一些冲突。

    显示完整的安装程序和卸载程序日志。