【问题标题】:How to force an installer to not reboot after repair?如何强制安装程序在修复后不重新启动?
【发布时间】:2015-07-15 13:29:19
【问题描述】:

我有一个用 Wix 编写的安装程序,有时会提示用户在修复后重新启动。怎么会发生这种情况以及如何消除这种行为?

【问题讨论】:

标签: wix windows-installer reboot repair


【解决方案1】:

两种技术:

1) 确定重启的原因并避免它。 (例如:停止服务,杀死进程)

2) 使用 REBOOT 属性禁止重新启动。注意修复可能要等到重启后才会生效。

1 通常是最好的选择。

【讨论】:

  • 什么会导致重启?
  • 通常是一个锁定的文件,因此为什么要停止可能有文件锁定的进程。
  • 为什么修复可能要等到重启后才能生效?我的安装程序只部署一些文件并写入注册表项。在这种情况下使用 REBOOT 属性是否安全?
  • 如果安装程序需要修复锁定的文件并且旧文件错误而新文件正确,则新文件将在重新启动后才能使用。我建议阅读 Win32 MoveFile 函数和 PendingFileRenameOperations 模式。
  • 意识到 MSI 是声明性的。他们从如何完成中抽象出需要做什么。后者很少记录,因为您不需要知道。据推测,InstallFiles 和 MoveFiles 标准操作使用带有 MOVEFILE_DELAY_UNTIL_REBOOT 参数的 MoveFileEx。你可以在 StackOverflow 上搜索这两个词,看看它出现的频率。
【解决方案2】:

修复后重新启动的最常见原因是安装程序访问了应用程序仍处于锁定状态的文件。这通常可以在修复日志中识别(有时需要花费一些时间才能找到安装程序遇到问题的文件)。如果您无法在日志中找到所需的信息,请在此处发布,我们将与您一起查看。

【讨论】:

【解决方案3】:

在您的 WXS 文件中的相关位置添加此属性,并确保没有任何内容会覆盖其他内容的值。这将导致重新启动提示不会发生并且即使在静默运行时检测到有必要也不会发生重新启动,因为当您未设置此选项时,静默重新启动提示将自动触发重新启动顺序属性值为"ReallySuppress"

<Property Id="REBOOT" Value="ReallySuppress" />

如果您愿意,可以在这里阅读:https://msdn.microsoft.com/en-us/library/windows/desktop/aa371101

【讨论】:

  • >> 在 WXS 文件中的相关位置添加此属性
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 2015-06-14
  • 2020-10-09
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
相关资源
最近更新 更多