簡體   English   中英

運行另一個安裝時,Process.WaitForExit掛起

[英]Process.WaitForExit hangs while another installation is run

美好的一天! 我正在安裝程序,它將使用Process.Start為我的軟件安裝其他依賴項。

foreach dependency:
var process = System.Diagnostics.Process.Start(processStartInfo);
process.WaitForExit();

問題是當運行另一個msi安裝時,WaitForExit掛起(而當我關閉另一個msi安裝時,WaitForExit也退出)。

我不能使用超時,因為在非常不同的安裝時間下依賴關系是不同的。

有什么方法可以處理這種情況並正確終止進程(實際上我想知道依賴項是正在安裝還是剛剛掛起)? 非常感謝。

解決方案:就我而言,該問題通過檢查'msiexec'進程是否正在運行來解決。

解決我的問題的方法-檢查由msiexec創建的全局互斥鎖。 這也是檢查是否正在運行另一個msi安裝的正確方法。

    public static bool WaitAnotherMsiInstallation(int timeout)
    {
        const string MsiMutexName = "Global\\_MSIExecute";

        try
        {
            using (var msiMutex = Mutex.OpenExisting(MsiMutexName, MutexRights.Synchronize))
            {
                return msiMutex.WaitOne(timeout);
            }
        } 
        catch (WaitHandleCannotBeOpenedException)
        {
            // The named mutex does not exist.
            return true;
        }
        catch (ObjectDisposedException)
        {
            // Mutex was disposed between opening it and attempting to wait on it
            return true;
        }
    }

這是一些詳細信息http://msdn.microsoft.com/zh-cn/library/aa372909(VS.85).aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM