什么告诉 Windows 安装程序服务正在进行另一个安装?

什么告诉 Windows 安装程序服务正在进行另一个安装?

错误截图

修复此错误的常用方法是重启机器,这通常确实可以解决问题。对于特别棘手的情况,其他解决方案包括禁用安装程序服务,然后重新启动。

但是,为了回答这个问题,我们假设这个错误发生在服务器或其他无法接受停机的系统上。我们希望在不重启的情况下完成此操作。

显然,安装程序在抛出此错误消息之前会检查某个存储的数据。存在一些标志,告知安装程序服务正在进行另一个安装。

我感兴趣的是这些数据被存储在哪里

什么确切地通知安装程序服务另一个安装已在进行中?

答案1

Windows Installer 运行时在 (卸载) 安装的某些阶段获取具有名称的全局互斥锁_MSIExecute。一个互斥锁一次只能由一个线程拥有;对于全局互斥锁,即整个系统上的一个线程。任何后续获取互斥锁所有权的尝试都将失败,直到当前所有者释放它。

互斥锁是 Windows 内核中的临时对象。它在任何时候都不是磁盘上的文件。如果当前拥有互斥锁的线程退出而未明确释放它,则会自动释放它。

这与某些程序用来防止程序的多个实例运行的机制相同。


回答另一个隐含的问题哪个进程持有该互斥锁,您可以使用 Microsoft/Sysinternals 等工具进程探索器或者处理查找互斥锁。在 Process Explorer 中,它应该出现在句柄搜索 (Ctrl+F) 中。

找到进程后,您需要决定如何处理它。最安全选项通常是等待,但如果它不知何故卡在(卸载)安装步骤中,您可能别无选择,只能将其终止。当然,终止它可能会产生后果,例如留下半(未)安装的程序 - MSI 应该保证回滚,但当执行回滚的进程被终止时,这些就很难了!也很难判断它是否真的卡住了,因为有些步骤可能需要很长时间才能完成。


也可以看看:

相关内容