我有一个Windows Installer MSI软件包,用于安装有时需要重新启动才能升级的驱动程序;在WriteRegistryValues之后,驱动程序由延迟的自定义操作安装。当需要重新启动时,会进行回滚,并告知用户重新启动并再次运行安装。
在InstallExecuteSequence中,RemoveExistingProducts操作位于InstallValidate和InstallInitialize之间,因此当升级表明需要重新启动时,之前的包已被删除。因此,当需要重新启动时,在回滚和错误消息“重新启动并重新运行此”后,我们的软件将不再安装。如果用户重新启动并重复安装,则工作正常。
我需要自动重启并恢复安装,因此用户不必实际执行任何操作(除了同意重启之外)。
写入注册表的RunOnce密钥的命令可以在重新启动后再次运行安装,但我认为在驱动程序安装的延迟自定义操作中发生的情况调整ForceReboot是很棘手的。也许很难确定在恢复安装中要做什么。
非常欢迎有关最佳做法或指出潜在问题的建议。
答案 0 :(得分:2)
在InstallInitialize之前或在InstallFinalize之后删除现有产品不会将Action放入新产品的审核脚本中,因此您说在升级完成之前已删除旧产品。
因此,您可能希望尝试在InstallInitialize和InstallFinalize之间执行RemoveExisitngProducts,这样它在删除中就位于审计脚本部分中,因此它将跟踪,重新启动并恢复。
查看系统重启属性 here