Используя Process.Start, я запускаю различные процессы IE8 и Firefox (3.5), для которых я сохраняю экземпляр Process.
Чуть позже в приложении я буду использовать свойство MainWindowHandle экземпляров Process, чтобы настроить окно для использования с некоторыми функциями API платформы через P / Invoke.
Однако и IE8, и Firefox убьют второй процесс, который я запускаю, а затем перезапустите его, используя первый. Это означает, что мой экземпляр Process теперь ссылается на закрытый процесс, поэтому HasExited имеет значение true, а MainWindowHandle равен IntPtr.Zero.
Вот пример того, что происходит (я использую IE8 для этого примера):
- Process.Start вызывается с помощью «iexplore.exe»
- Процесс запускается и продолжает работать
- Process.Start вызывается снова с «iexplore.exe»
- Первый процесс продолжает работать, но второй немедленно прекращается
- Запущен другой процесс iexplore (предположительно, первым процессом iexplore).
- В течение этого времени пользователь видит второе окно IE только после того, как второй процесс завершен и перезапущен.
Я понимаю, почему эти браузеры ведут себя так, но это создает для меня проблему, если я хочу позже контролировать созданный процесс.
Кто-нибудь сталкивался с этой проблемой раньше? Как бы вы порекомендовали получить ссылку на процесс обратно? Я думал об использовании GetProcessesByName и итерации по заголовкам их окон, но, к сожалению, заголовки могут совпадать с первым запущенным процессом.
Примечание: IE8 была первой версией IE, которая использовала разделение процессов, и поэтому только IE8 ведет себя таким образом, у меня нет этой проблемы с IE7, к сожалению, мне также нужна поддержка IE8.