C# 检查windows installer互斥锁的可用性

C# 检查windows installer互斥锁的可用性,c#,windows-installer,C#,Windows Installer,在我的一个集成测试中,我有两个线程卸载然后安装一个程序,但是当按顺序运行时,它们生成一个错误无法获取执行互斥锁。系统错误258。 为了解决这个问题,我必须在卸载后睡觉。我试着检查msiexec进程是否正在运行,但是始终有2-3个进程,所以这不是一个好的指示器。有没有办法检查msiexec执行互斥锁是否可用 顺便说一句,请记住,从技术上讲,MSI并不总是一种服务。Win 9x平台不支持windows服务。这是一个老问题,但最好使用Mutex.TryOpenExisting而不是Mutex.Open

在我的一个集成测试中,我有两个线程卸载然后安装一个程序,但是当按顺序运行时,它们生成一个错误
无法获取执行互斥锁。系统错误258。


为了解决这个问题,我必须在卸载后睡觉。我试着检查msiexec进程是否正在运行,但是始终有2-3个进程,所以这不是一个好的指示器。有没有办法检查msiexec执行互斥锁是否可用

顺便说一句,请记住,从技术上讲,MSI并不总是一种服务。Win 9x平台不支持windows服务。这是一个老问题,但最好使用Mutex.TryOpenExisting而不是Mutex.OpenExisting--程序流不应使用异常,特别是在MSI未运行的非常常见的情况下。
    bool msiIsRunning = false;
    try
    {
        using(var mutex = Mutex.OpenExisting(@"Global\_MSIExecute"))
        {
            msiIsRunning = true;
        }
    }
    catch (Exception)
    {
       // Mutex not found; MSI isn't running
    }