Karu Asked: 2020-05-04 20:27:19 +0800 CST2020-05-04 20:27:19 +0800 CST 2020-05-04 20:27:19 +0800 CST 什么告诉 Windows 安装程序服务正在进行另一个安装? 772 此错误的通常修复方法是重新启动机器,这确实通常可以解决问题。针对特别顽固的情况的其他解决方案包括禁用安装程序服务,然后重新启动。 但是,就这个问题而言,假设此错误发生在服务器或其他无法接受停机的系统上。我们希望在不重新启动的情况下执行此操作。 显然,在某个地方存储了一些数据,安装程序在抛出此错误消息之前正在检查这些数据。存在一些标志,告诉安装程序服务正在进行另一个安装。 我感兴趣的是这些数据的存储位置。 什么确切地通知安装服务另一个安装已经在进行中? windows windows-installer 1 个回答 Voted Best Answer Bob 2020-05-04T21:07:02+08:002020-05-04T21:07:02+08:00 _MSIExecuteWindows Installer 运行时在(卸载)安装的某些阶段获取具有名称的全局互斥锁。一个互斥锁一次只能由一个线程拥有;对于全局互斥锁,即整个系统上的一个线程。任何后续获取互斥锁所有权的尝试都将失败,直到当前所有者释放它。 互斥体是 Windows 内核中的临时对象。它在任何时候都不是磁盘上的文件。如果当前拥有的线程在没有显式释放的情况下退出,则互斥锁会自动释放。 这与某些程序用来防止程序的多个实例运行的机制相同。 要回答另一个隐含的问题,即哪个进程持有该互斥锁,您可以使用 Microsoft/Sysinternals 的Process Explorer或Handle等工具来查找互斥锁。在 Process Explorer 中,它应该出现在句柄搜索 (Ctrl+F) 中。 找到流程后,您需要决定如何处理它。最安全的选择通常是等待,但如果它以某种方式卡在(卸载)安装步骤中,您可能别无选择,只能杀死它。当然,杀死它可能会产生后果,例如留下一个半(未)安装的程序 - MSI 应该保证回滚,但是当执行它们的进程被杀死时,这些是困难的!也很难判断它是否真的卡住了,因为有些步骤可能需要很长时间才能完成。 也可以看看: https://docs.microsoft.com/en-us/windows/win32/msi/-msiexecute-mutex https://stackoverflow.com/questions/32049193/how-to-prevent-msi-error-another-program-is-being-installed
_MSIExecute
Windows Installer 运行时在(卸载)安装的某些阶段获取具有名称的全局互斥锁。一个互斥锁一次只能由一个线程拥有;对于全局互斥锁,即整个系统上的一个线程。任何后续获取互斥锁所有权的尝试都将失败,直到当前所有者释放它。互斥体是 Windows 内核中的临时对象。它在任何时候都不是磁盘上的文件。如果当前拥有的线程在没有显式释放的情况下退出,则互斥锁会自动释放。
这与某些程序用来防止程序的多个实例运行的机制相同。
要回答另一个隐含的问题,即哪个进程持有该互斥锁,您可以使用 Microsoft/Sysinternals 的Process Explorer或Handle等工具来查找互斥锁。在 Process Explorer 中,它应该出现在句柄搜索 (Ctrl+F) 中。
找到流程后,您需要决定如何处理它。最安全的选择通常是等待,但如果它以某种方式卡在(卸载)安装步骤中,您可能别无选择,只能杀死它。当然,杀死它可能会产生后果,例如留下一个半(未)安装的程序 - MSI 应该保证回滚,但是当执行它们的进程被杀死时,这些是困难的!也很难判断它是否真的卡住了,因为有些步骤可能需要很长时间才能完成。
也可以看看: