我已经使用 Wix 为我的应用程序(此处称为“XYZ”)创建了一个没有 UI 的安装包。
如果我在 XYZ.exe 运行时双击 MSI,它会通知我进程正在锁定文件:我可以选择终止锁定进程或中止安装。 这很好:作为用户,我可以决定要做什么。
但是当我从命令行运行相同的 MSI 时,
msiexec/i XYZ.msi/quiet/norestart
如果 XYZ.exe
被发现正在运行,它将被终止。这在我的场景中是绝对不能接受的:MSI 应该中止安装并退出。
如果我设置“Mondo”接口(interface)(或任何其他接口(interface)),相同的安装包会按预期工作。
解决方案是什么?
最佳答案
您链接到的文章说重启管理器会关闭正在运行的进程以减轻重启,并且它应该在设置完成后启动该进程。它还提到哪些属性控制与 Restart Manager 的交互:
MSIRMSHUTDOWN
当设置为 2
时:
Processes or services that are currently using files affected by the update are shut down only if they have all been registered for a restart. If any process or service has not been registered for a restart, then no processes or services are shut down.
确保MSIDISABLERMRESTART
值为 0
。在这种情况下,Restart Manager 将重新启动它关闭的所有进程和服务。
如果您禁止关闭正在运行的进程,安装不会失败:它会成功并且 Windows Installer 将启动系统重新启动以完成更新。您可以使用 /norestart
选项来抑制重启。然而,建议尽快重新启动,因为系统未处于一致状态。
因此,最好教会您的进程与 Restart Manager 通信,以便减轻重启。
关于command-line - 无 UI 的 WiX 命令行选项 '/quiet' 会终止正在运行的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8354767/