21

VSTS デバッガーを使用して class のインスタンスのプロパティを表示するとProcess、多くのプロパティが でマークされInvalidOperationExceptionます。なんで?私は何か間違ったことをしていますか?

VSTS 2008 + C# + .Net 2.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();

デバッガーのスクリーンショット:

ここに画像の説明を入力

4

3 に答える 3

36

デバッガーの画像が撮影されたときに、実際にプロセスを開始しましたか? Start()これは、メソッドが呼び出される前に表示されると予想されるスクリーンショットです。

一般的なパターンは、 を作成し、データを入力してから、静的メソッドProcessStartInfoを呼び出すことに注意してください。これにより、概念が単純になります。オブジェクトは、開始されるまでProcess.Start(startInfo)表示されません。Process

于 2009-07-20T06:05:04.223 に答える
2

プロパティの多くは、プロセスを開始するまで InvalidOperationException とマークされています。オブジェクト「myProcess」は実行中のプロセスに関連付けられていないため、情報を取得できません。

プロセスを開始するコードの後に​​、これらのステートメントを追加してみてください

if (myProcess != null)  
{
  myProcess.WaitForExit();
   //or any other statements for that matter
}

これで、if ステートメント内にいるとき、VSTS デバッガーはオブジェクト myProcess に関連付けられたほとんどのプロパティを表示できるようになります。これは、myProcess オブジェクトが実行中のプロセス「IExplore.exe」に関連付けられているために発生します。

于 2009-07-20T06:38:34.827 に答える
1

はい、これは予想される動作であり、MSDN でも明確に文書化されています。

たとえば、Process.BasePriority プロパティは、プロセスが終了した場合、またはプロセスが開始されていない場合に、InvalidOperationException 例外をスローできます (詳細については、MSDNを参照してください)。

于 2009-07-20T06:32:27.397 に答える