1

我有一个 Windows Installer MSI 软件包,用于安装有时需要重新启动才能升级的驱动程序;驱动程序是通过 WriteRegistryValues 之后的延迟自定义操作安装的。当需要重新启动时,会进行回滚,并告知用户重新启动并再次运行安装。

在 InstallExecuteSequence 中,RemoveExistingProducts 操作位于 InstallValidate 和 InstallInitialize 之间,因此当升级发出需要重新启动的信号时,先前的包已被删除。因此,当需要重新启动时,在回滚和错误消息“重新启动并重新运行”之后,我们的软件不再安装。如果用户重新启动并重复安装,一切正常。

我需要自动重启和恢复安装,所以用户实际上不需要做任何事情(当然除了同意重启。)

写入注册表的 RunOnce 键的命令可以在重新启动后再次运行安装,但我认为将 ForceReboot 设置为驱动程序安装的延迟自定义操作中发生的情况会很棘手。决定在恢复安装中做什么也可能很棘手。

非常欢迎有关最佳实践的建议或潜在问题的提示。

4

1 回答 1

2

在 InstallInitialize 之前或 InstallFinalize 之后的 RemoveExistingProducts 不会将 Action 放入新产品的审核脚本中,因此如您所说,旧产品在升级完成之前被删除。

因此,您可能想尝试将 RemoveExisitngProducts 执行放在 InstallInitialize 和 InstallFinalize 之间,这样它在删除中就在审计脚本部分中,因此它将跟踪、重新启动和恢复。

在这里查看系统重启属性

于 2008-09-26T21:10:48.740 回答