我用InstallShield创建了一个设置。在升级或卸载过程中,在安装验证过程之后,我得到一个警告对话框,其中包含以下消息:
"安装程序必须更新在系统运行时不能更新的文件或服务。如果选择继续,则需要重新启动才能完成设置。
我在MSI日志文件中发现了以下内容:
MSI (s) (4C:78) [18:17:52:182]: RESTART MANAGER: Detected that application with id 4,友好名称'System',类型RmCritical和状态1持有文件[s]正在使用。MSI (s) (4C:78) [18:17:52:182]: RESTART MANAGER:没有检测到一个关键的应用程序持有正在使用的文件,因此需要重新启动。MSI (s) (4C:78)[18:17:52:182]:注:1:16 10
我想知道为什么我收到这个消息以及如何避免它。
(我已经检查了以下注册表项,它有oldmsedge.exe,我认为它与此问题无关)
HKEY_LOCAL_MACHINE SYSTEM CurrentControlSet 控制会话管理器 FileRenameOperations
您可以设置以下属性:
重启= ReallySuppress MSIRESTARTMANAGERCONTROL =禁用
待处理的文件重命名
:FileRenameOperations
Key保存等待在重新启动/重新启动时更新(和/或重命名)的文件和资源列表。这确实可以触发您看到的警告。安装程序发现您的安装程序试图替换的正在使用的文件,因此希望在释放所有锁(通过重新启动)后重新启动计算机以将新文件版本放置到位。
Windows服务 :有很多东西可以阻止文件被替换。一个常见的问题是,在尝试替换正在使用的服务的文件之前,没有在安装中正确关闭正在运行的服务。修复此问题以使您的设置关闭有问题的服务。在MSI中有一些机制可以做到这一点(只要服务工作正常——完全不保证)。
运行应用程序 :通常建议关闭所有正常安装安装程序时正在运行的Windows应用程序(不仅仅是服务)。这是为了释放可能导致文件覆盖或注册表更新失败的类似文件和资源锁。
其他锁 :文件也可以通过其他机制锁定,例如恶意软件扫描程序、反病毒程序或类似的安全进程。或者其他一些事情,比如备份机制、用户手动打开的临时锁定文件(如果应用程序实际上锁定了文件)、ACL权限问题,最糟糕的是:真正的恶意软件。还有一些其他的技术细节
重新启动管理器
: Windows有重新启动管理器功能来处理这个问题-文件和资源被锁定,无法更新。它本质上是一种应用程序以一种标准化的方式关闭自己的方式——通过API(方法调用)——这样设置和系统进程可以指示相关的应用程序:"shut yourself down"
-然后系统会在适当的时候重新启动应用程序。
技术 :高级安装程序-领先的部署软件的制造商-在使应用程序支持重启管理器特性的技术方面有一个入门教程。这里有更多关于RestartManager的信息。
链接:
- 未被MSI-installer (Visual Studio Installer项目)更新的正在使用的文件
- Windows Installer-Avoid FileinUse对话框
- 安装时重启,卸载时不要重启
- RestartManager导致worker角色重新启动
这可能不适用于您的情况,但在我的情况下,系统坐在字体文件在我的安装,我能够解决它通过嵌入字体作为Qt资源,而不是将它们安装为文件。要检查哪些文件导致了问题,请在regedit中访问以下密钥,同时显示重启管理器提示(这里发现的技巧):
ComputerHKEY_CURRENT_USERSOFTWAREMicrosoftRestartManagerSession0000
,看看RegFiles0000
里有什么。偶尔也会是Session0001
、RegFiles0001
等。
然后询问句柄或进程资源管理器哪些进程持有什么。由于涉及到System,您可能需要管理员权限,否则Handle将找不到任何内容。