2009-08-04 1 views
1

Используя Process.Start, я запускаю различные процессы IE8 и Firefox (3.5), для которых я сохраняю экземпляр процесса.Как восстановить ссылку на процесс, который был перезапущен?

Немного позже в приложении я использую свойство MainWindowHandle экземпляров процесса, чтобы настроить окно для использования с некоторыми функциями API платформы через P/Invoke.

Тем не менее, как IE8, так и Firefox убьют второй процесс, который я запускаю, а затем перезапустите его, используя первый. Это означает, что мой экземпляр Process теперь относится к закрытому процессу, и поэтому HasExited истинно, а MainWindowHandle равно IntPtr.Zero.

Вот пример того, что происходит (я использую IE8 для этого примера):

  • Process.Start вызывается с
  • запускает процесс «iexplore.exe» и продолжает работать
  • процесса .Start вызывается снова с помощью "iexplore.exe"
  • Первый процесс продолжается, но второй немедленно уничтожается
  • Запускается другой процесс iexplore (предположительно, первым процессом iexplore).
  • За это время пользователь видит второе окно IE только после того, как второй процесс был убит и перезапущен.

Я понимаю, почему эти браузеры ведут себя таким образом, но это создает проблему для меня, если я хочу позже управлять созданным процессом.

Неужели кто-нибудь сталкивался с этой проблемой раньше? Как вы порекомендуете получить ссылку на этот процесс? Я думал об использовании GetProcessesByName и итерации через их названия окон, но, к сожалению, названия могут быть такими же, как и первый запущенный процесс.

Примечание: IE8 была первая версия IE, чтобы использовать разделение процесса и поэтому только IE8 ведет себя таким образом, я не имею эту проблему с IE7, Unfortuantely мне нужна поддержка IE8, а также.

ответ

Смежные вопросы