我有一个 WPF 应用程序正在使用Process.Start
方法启动 Internet Explorer(版本 9,在 Win7 X64 上)。
我保存 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 是可以的。