少し問題が発生しました。
スリップストリームされた SP3 とパッチが適用された SP3に関する私の以前の質問に関連して、ローカル ディスクから単純な .html ファイルをロードするように指示された Internet Explorer プロセスが開始されているという結論に達しました。大規模なチャット/会議システムの残りの部分。Internet Explorer は、Lotus Notes クライアントから開始されます。
残念ながら、IExplore.exe プロセスがタスク マネージャーに表示され、数秒後に再び消えることしかわかりません。
ディスク上にあるローカルの .html ファイルを開こうとすると、上部に情報バーが表示され、アクティブ コンテンツが無効になっていることが示されます。ただし、これは実際の問題ではありません。同じ設定ですべてが機能する別のマシンがあり、.html ファイルを手動でロードすると、そこでも同じエラーが発生します。
ただし、メモから IExplore を開始すると別のエラー メッセージが表示される可能性がありますが、このプロセスはシステムの残りの部分を開始するだけであり、このウィンドウは非表示になっているため、表示されません。つまり、エラーです。メッセージ/問題。
そこで、IExplore.exe が起動するのを待ってすぐにウィンドウを表示する小さなプログラムを作成して、エラー メッセージや問題を確認できるようにする必要があるのではないかと考えました。少なくとも、うまくいけば、それを見ることができるでしょう。
これまでのところ、非表示のウィンドウを使用して自分のプログラムからプロセスを開始すると、メイン ウィンドウ ハンドルが 0 になるため、結局ウィンドウを表示できません。Lotus Notes から開始されたこの IExplore.exe プロセスにも同じ問題があると予想されます。
私の監視プログラムは C# で書かれており、基本的に次のループを実行します。
foreach (var process in Process.GetProcesses())
{
if (process.ProcessName.ToLower() == "iexplore")
result.Add(process);
}
これにより、すべての IExplore.exe プロセスが、ウィンドウかどうかに関係なく選択されます。IE8 では、予想どおり、最初のウィンドウに対して 2 つのプロセスが取得されます。これを何度も実行し、以前の実行との違いを処理します。
ただし、プロセスの開始時にウィンドウハンドル 0 が一時的にあるため、次のように変更しました。
foreach (var process in Process.GetProcesses())
{
if (process.ProcessName.ToLower() == "iexplore" &&
process.MainWindowHandle != IntPtr.Zero)
{
result.Add(process);
}
}
しかし、ウィンドウがハンドルを取得した後でも、何も取得しません (そして、ウィンドウが表示された後、process.MainWindowHandle はゼロ以外のハンドル値を持ちますが、ウィンドウが表示されず、0 のままです。)
質問は、この非表示の IExplore.exe プロセスを取得して、ウィンドウ ハンドルがまだない場合に、それ自体を表示するように指示する方法はありますか? 私はそれを疑っていますが、誰かが私が間違っていることを証明できるかもしれません.
そうでない場合、私のバックアップ計画は、ウィンドウを表示するように指定することを除いて、すべてのコマンド ライン引数を元の引数に転送する shim IExplore.exe プログラムを作成することです。これは解決策になりますか?