2

メソッドを使用して 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 を閉じても問題ありません。

4

3 に答える 3

0

Internet Explorer のすべてのタブはプロセスです。複数のタブで IE を開いた場合、またはユーザーが別のタブを開いた場合、プロセスを強制終了するだけでは十分ではありません。

しかし

_process.Close();

_process に属するすべてのリソースを解放します。_process.Kill()代わりにメソッドを使用できます。

于 2012-07-05T14:49:58.163 に答える
0

セキュリティと安定性を向上させるために、IE8 は Loosely Coupled Internet Explorer (LCIE) アーキテクチャを使用し、ブラウザ フレームとタブを別々のプロセスで実行します。LCIE は、グリッチやハングによってブラウザ全体がダウンするのを防ぎ、パフォーマンスとスケーラビリティの向上につながります。私はウィキペディアでこれを読みました。

LCIEを無効にすることはできますが、なぜそうしたいのかわかりません。@Damien_The_Unbelieverが上記で言及したソリューションの使用を検討します。

于 2012-07-05T14:55:48.960 に答える