Process.WaitForExit зависает при запуске другой установки
Добрый день! Я работаю над установщиком, который устанавливает дополнительные зависимости для моего программного обеспечения с помощью Process.Start.
foreach dependency:
var process = System.Diagnostics.Process.Start(processStartInfo);
process.WaitForExit();
Проблема в том, что когда запускается другая установка msi, WaitForExit зависает (и когда я закрываю эту другую установку msi, WaitForExit также завершается).
Я не могу использовать тайм-ауты, потому что зависимости различаются в зависимости от времени установки.
Есть ли способы справиться с этой ситуацией и правильно завершить процесс (на самом деле я хочу знать, зависимость устанавливается или просто зависает)? Большое спасибо.
Решение: в моем случае проблема решается путем проверки, запущен ли процесс msiexec.
1 ответ
Решение моей проблемы - проверить глобальный мьютекс, созданный 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