メソッドを使用して Internet Explorer (バージョン 9、Win7 X64) を起動する WPF アプリケーションがあります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
ていますが、問題を解決しているようには見えません。
[編集]これは、私が数日前に尋ねた別の質問の続きです。実際、生成された IE をアプリケーションに埋め込むために SetParent 関数をピンボークしています。探している分離がサポートされていないため、WebBrowser コントロールを使用できません。したがって、アプリを閉じるときに IE を閉じても問題ありません。