У меня есть некоторый код, как это:не WaitForExit таймаут правильно, просто висит
process.CloseMainWindow();
if (!process.WaitForExit(5000)) { process.Kill(); }
Идея заключается в том, чтобы позволить выход процесса корректно, но если это займет больше времени, чем на 5 секунд, я предполагаю, что это должно быть убит.
Это похоже на работу в большинстве случаев, но если процесс вызвал сообщение об ошибке Windows, он просто зависает. Раньше у меня был только «process.Kill()», и это сработало, поэтому я должен предположить, что он фактически застревает в вызове WaitForExit (5000), хотя я даю ему значение тайм-аута.
Любые причины этого происходили?
EDIT: Мне интересно, возможно ли это, что на самом деле это зависание CloseMainWindow(), из-за этого сообщения об ошибке. В этом случае, проверяя свойство «отвечающего» процесса, прежде чем пытаться метод CloseMainWindow() на самом деле вернуть «false»? Если это так, я могу проверить это, а затем использовать Kill, если это так.
Windows убивает процесс, поэтому выход никогда не возникает. – jdweng
Нет, процесс все еще запущен, я вижу окно за окном ошибки. –
Что касается тестирования, если у вас есть ошибка окна с Marshal.GetLastWin32Error. Если процесс запущен, завершите процесс. Попробуйте проверить, существует ли процесс до убийства. – jdweng