Wix安装程序问题:为什么RestartManager将服务标记为RMCritical而不是RMService

前端之家收集整理的这篇文章主要介绍了Wix安装程序问题:为什么RestartManager将服务标记为RMCritical而不是RMService前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试阻止我们的wix安装程序在卸载时提示用户重新启动.我们的服务设置为在卸载时卸载和删除.对我们来说不幸的是,RestartManager提示用户在InstallValidate操作期间需要重新启动.此操作发生在StopServices和DeleteServices操作之前.

检查日志,似乎RestartManager认为我们的服务是一个关键过程:

“检测到ID为1234的应用程序,友好名称’abc’,服务短名称’xyz’,类型为RmCritical,状态1保存正在使用的文件[s].”

这些服务在本地系统帐户下安装并运行.我不确定,但我认为如果RestartManager返回RmService而不是RmCritical,那么它就不会提示重启.

任何帮助非常感谢.

编辑:
MSDN声明对于RMCritical:
需要重新启动系统才能完成安装,因为无法关闭进程.由于以下原因,无法关闭该过程.该过程可能是一个关键过程.当前用户可能没有权限关闭该进程.该进程可能属于启动Restart Manager的主安装程序.

用户确实有权关闭服务,这些服务与msiexec无关,所以我只能假设我们的服务被认为是一个关键过程….但为什么呢?

解决方法

您可以通过设置MSI属性MSIRESTARTMANAGERCONTROL =来禁止窗口的RestartManager
“禁用”(请参阅​​此处的文档 – http://msdn.microsoft.com/en-us/library/windows/desktop/aa370377(v=vs.85).aspx).这种方法本身唯一的问题是,它们不会提示用户使用需要重启的对话框,而是会看到正在使用的文件对话框(并要求关闭可能正在使用这些文件/服务的任何应用程序).在InstallExecute序列的InstallValidate标准操作期间显示此对话框.

如果您想要熟悉这些对话框中的任何一个,您可以在InstallValidate之前安排自定义操作,以便在RestartManager有机会检查系统之前手动关闭所有正在运行的服务.这不遵循标准的MSI实践,因为通常您会标记一个自定义操作,将系统修改为“延迟”操作,但MSI不允许在InstallValidate之前运行任何延迟操作.因此,您必须将操作标记为“立即”,但在代码中您将继续并通过关闭服务来修改系统.这里的缺点是没有立即回滚操作,所以如果卸载/升级失败并且回滚,则停止的服务将保持停止状态.好处是用户在卸载/升级期间永远不必看到任何其他对话框.

猜你在找的Windows相关文章