如何防止由 MSI 1610 错误引起的重启对话框

How to prevent restart dialog caused by MSI 1610 error

我有一个使用 InstallShield 创建的设置。在升级或卸载期间,在安装验证过程之后,我收到一个警告对话框,其中包含以下消息:

“安装程序必须更新系统处于 运行 时无法更新的文件或服务。如果您选择继续,将需要重新启动才能完成安装程序”。

我在 MSI 日志文件中发现以下内容:

MSI (s) (4C:78) [18:17:52:182]:RESTART MANAGER:检测到 ID 为 4、友好名称 'System'、类型为 RmCritical 且状态为 1 的应用程序保存文件[s] 正在使用中。 MSI (s) (4C:78) [18:17:52:182]:RESTART MANAGER:检测到关键应用程序持有正在使用的文件 [s],因此需要重新启动。 MSI (s) (4C:78) [18:17:52:182]: 注: 1: 1610

我想了解为什么会收到此消息以及如何避免。

(我已经检查了以下注册表项,它有 oldmsedge.exe,我认为它与此问题无关)

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\FileRenameOperations

挂起的文件重命名FileRenameOperations键包含一个列表在重新启动/重新启动时等待更新(和/或重命名)的文件和资源。这确实是可以触发您看到的警告的东西。安装程序发现您的安装程序试图替换正在使用的文件,因此想要在释放所有锁定(通过重新启动)后重新启动计算机以放置新文件版本。

Windows服务:有很多东西可以防止文件被替换。一个常见问题是 运行 服务,在尝试替换服务正在使用的文件之前,您没有在设置中正确关闭这些服务。修复此问题以通过您的设置关闭有问题的服务。 There are mechanisms in MSI to do so(前提是服务正常运行——完全不能保证)。

运行 应用程序:通常建议关闭所有 正常 Windows 应用程序(不仅仅是服务)在您安装设置时 运行。这是为了释放类似的文件和资源锁,这些锁会导致文件覆盖或注册表更新失败。

其他锁定:文件也可以被其他机制锁定,例如恶意软件扫描程序、反病毒或类似的安全进程。或者其他一些事情,例如备份机制、用户手动打开的临时锁定文件(如果应用程序实际上锁定了文件)、ACL 权限问题,最糟糕的是:真正的恶意软件。以及一些进一步的技术细节。

: Windows 有重新启动管理器功能来处理这个问题 - 被锁定且无法更新的文件和资源。它本质上是应用程序以标准化方式自行关闭的一种方式 - 通过 API(方法调用) - 以便设置和系统进程可以指示相关应用程序:"shut yourself down" - 然后系统会在适当的时候重新启动应用程序。

技术Advanced Installer - makers of leading deployment software - has a primer on the technical aspects of making your application support the Restart Manager feature. And there is: more on RestartManager here.


链接:

  • RestartManager causes worker role to restart

您可以设置这些属性:

REBOOT=ReallySuppress MSIRESTARTMANAGERCONTROL=禁用