问题描述
我使用 InstallShield 创建了一个设置。在升级或卸载过程中,在安装验证过程之后,我收到一个警告对话框,其中包含以下消息:
“安装程序必须更新无法在系统运行时更新的文件或服务。如果您选择继续,则需要重新启动才能完成安装程序”。
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 权限问题,以及最糟糕的是:真正的恶意软件。以及一些进一步的技术细节。
Restart Manager:Windows 具有重新启动管理器功能来处理此问题 - 文件和资源被锁定且无法更新。它本质上是应用程序以标准化方式自行关闭的一种方式 - 通过 API(方法调用) - 以便设置和系统进程可以指示相关应用程序:"shut yourself down"
-然后系统会在适当的时候重新启动应用程序。
技术:Advanced Installer - 领先部署软件的制造商 - 对 making your application support the Restart Manager feature 的技术方面有入门了解。还有:more on RestartManager here。
链接:
- In-use files not updated by MSI-installer (Visual Studio Installer project)
- Windows Installer-Avoid FileinUse dialog box when Installing a package
- Reboot on install,Don't reboot on uninstall
- RestartManager causes worker role to restart
您可以设置这些属性:
REBOOT=ReallySuppress MSIRESTARTMANAGERCONTROL=禁用