InvalidOperationException
操作を完了できなかった場合は、 を受け取ります。コードでは、またはInvalidOperationException
を呼び出す前にプロセスが終了した場合に を受け取ることがあります。myProcess.Kill();
myProcess.CloseMainWindow();
すでに終了しているプロセスを強制終了することはできません。これを修正するには、スレッドがアイドル状態のときにプロセスを閉じないようにします。コマンドを実行する前に、例外をキャッチするか、プロセスが終了したかどうかを確認できます。
例
class MyProcess
{
public static void Main()
{
Process myProcess = new Process(); //Initialize a new Process of name myProcess
ProcessStartInfo ps = new ProcessStartInfo(); //Initialize a new ProcessStartInfo of name ps
try
{
ps.FileName = @"IExplore.exe"; //Set the target file name to IExplore.exe
ps.WindowStyle = ProcessWindowStyle.Normal; //Set the window state when the process is started to Normal
myProcess.StartInfo = ps; //Associate the properties to pass to myProcess.Start() from ps
myProcess.Start(); //Start the process
}
catch (Exception e)
{
Console.WriteLine(e.Message); //Write the exception message
}
Thread.Sleep(3000); //Stop responding for 3 seconds
if (myProcess.HasExited) //Continue if the process has exited
{
//The process has exited
//Console.WriteLine("The process has exited");
}
else //Continue if the process has not exited
{
//myProcess.CloseMainWindow(); //Close the main Window
myProcess.Kill(); //Terminate the process
}
Console.WriteLine("press [enter] to exit"); //Writes press [enter] to exit
Console.Read(); //Waits for user input
}
}
注意: IE8 を実行している場合、Internet Explorer 8 が変更を実装したことに気付くかもしれません。複数の開いているブラウザー ウィンドウまたはフレームは、ユーザーが開いた新しい IE フレーム ウィンドウを含む、開いているすべてのタブとウィンドウで同じセッション Cookie を共有します。
引数-nomergeを指定してプロセスIExplore.exeを実行し、新しい IE8 ウィンドウ セッションを実行して、作成した新しいプロセスと以前に作成したプロセス (IE8 によって作成され、他のプロセスとマージされる既定のプロセス) をマージしないようにすることができます。したがって、IE8 によって作成されたプロセスではなく、アプリケーションから制御できる新しいプロセスを持つことになります。
例
Process myProcess = new Process(); //Initialize a new Process of name myProcess
ProcessStartInfo ps = new ProcessStartInfo(); //Initialize a new ProcessStartInfo of name ps
try
{
ps.FileName = @"IExplore.exe"; //Set the target file name to IExplore.exe
ps.Arguments = "-nomerge";
ps.WindowStyle = ProcessWindowStyle.Normal; //Set the window state when the process is started to Normal
myProcess.StartInfo = ps; //Associate the properties to pass to myProcess.Start() from ps
myProcess.Start(); //Start the process
}
catch (Exception e)
{
Console.WriteLine(e.Message); //Write the exception message
}
Thread.Sleep(3000); //Stop responding for 3 seconds
if (myProcess.HasExited) //Continue if the process has exited
{
//The process has exited
//Console.WriteLine("The process has exited");
}
else //Continue if the process has not exited; evaluated if the process was not exited.
{
myProcess.Kill(); //Terminate the process
}
さらに、プロセス終了コードは-1
、IE8 のプロセスが予期せず1
終了した場合、ユーザーによって終了された場合、および0
別のインスタンスに制御を渡して終了した場合と同じになります。
ありがとう、
これがお役に立てば幸いです:)