У меня есть приложение WPF, которое запускает Internet Explorer (версия 9, на Win7 X64) с использованием метода Process.Start
.
Я сохраняю ProcessID, чтобы закрыть его при закрытии приложения. Однако, когда приложение закрывается, Internet Explorer по-прежнему виден в диспетчере задач.
Вот код, который я использую:
public class MyClass : IDisposable
{
Process _process;
public void Go()
{
ProcessStartInfo psi = new ProcessStartInfo {
FileName = "iexplore.exe",
Arguments = "-noframemerging -private \"http://whathaveyoutried.com\""
};
_process = Process.Start(psi);
_process.WaitForInputIdle();
}
private void Close(object sender, RoutedEventArgs e)
{
if (_process != null)
{
_process.Refresh();
_process.Close();
}
}
public void Dispose()
{
if (_process != null)
{
_process.Refresh();
_process.Close();
}
}
}
}
Я дважды проверил, вызов _process.Close()
действительно выполнен.
Что может вызвать такое поведение?
PS: я подозреваю, что это связано с внутренним Internet Explorer. Запуск exe не обязательно создает новый процесс, но может использовать некоторые IPC для управления другими экземплярами. Я использую аргумент командной строки -noframemerging
, но он не решает проблему.
[Изменить] Это продолжение другого вопроса, который я задал несколько дней назад. На самом деле, я вызываю функцию SetParent, чтобы внедрить созданный IE в свое приложение. Я не могу использовать элемент управления WebBrowser, поскольку он не поддерживает изоляцию, которую я ищу. Так что нормально закрывать IE, когда мое приложение закрывается.