Process.WaitForExit зависает при запуске другой установки - PullRequest
0 голосов
/ 16 ноября 2011

Добрый день!Я работаю над установщиком, который устанавливает дополнительные зависимости для моего программного обеспечения с помощью Process.Start.

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

Проблема заключается в том, что при запуске другой установки msi зависает WaitForExit (и когда я закрываю эту другую установку msi,WaitForExit также завершается).

Я не могу использовать тайм-ауты, потому что зависимости различаются в зависимости от времени установки.

Есть ли способы справиться с этой ситуацией и правильно завершить процесс (на самом деле я хочузнать, это зависимость устанавливается или просто висит)?Большое спасибо.

Решение: в моем случае проблема решается путем проверки, запущен ли процесс 'msiexec'.

1 Ответ

1 голос
/ 30 декабря 2011

Решение моей проблемы - проверить глобальный мьютекс, созданный 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/en-us/library/aa372909(VS.85).aspx

...