VSTSデバッガーを使用してクラスProcess
のインスタンスのプロパティを確認すると、プロパティの多くがInvalidOperationException
でマークされています。どうして?私は何か間違ったことをしていますか?
VSTS 2008 + C#+ .Net2.0を使用してコンソールアプリケーションを開発しています。
これが私のコードです:
System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
myProcess.StartInfo.FileName = "IExplore.exe";
myProcess.StartInfo.Arguments = @"www.google.com";
myProcess.StartInfo.Verb = "runas";
myProcess.Start();
そしてデバッガーのスクリーンショット:
デバッガーの写真が撮られたときに実際にプロセスを開始しましたか?これは、Start()
メソッドが呼び出される前に表示されると予想されるスクリーンショットです。
一般的なパターンは、ProcessStartInfo
を作成してデータを入力し、静的Process.Start(startInfo)
メソッドを呼び出すことです。これにより、概念が単純になります。開始されるまで、Process
オブジェクトは表示されません。
はい、これは予想される動作であり、MSDNにも明確に文書化されています。
たとえば、Process.BasePriorityプロパティは、プロセスが終了したとき、またはプロセスが開始されていないときに、InvalidOperationException例外をスローする可能性があります(詳細については、 [〜#〜] msdn [〜#〜] を参照してください)。
プロセスを開始するまで、プロパティの多くはInvalidOperationExceptionでマークされています。オブジェクト 'myProcess'は実行中のプロセスに関連付けられていないため、情報を取得できません。
プロセスを開始するコードの後に、これらのステートメントを追加してみてください
if (myProcess != null)
{
myProcess.WaitForExit();
//or any other statements for that matter
}
これで、ifステートメント内にいるときに、VSTSデバッガーはオブジェクトmyProcessに関連付けられているほとんどのプロパティを表示できるようになります。これは、myProcessオブジェクトが実行中のプロセス「IExplore.exe」に関連付けられているために発生します。