web-dev-qa-db-ja.com

C#プロセスクラスからの無効な操作例外

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();

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

enter image description here

17
George2

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

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

34
Jon Skeet

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

たとえば、Process.BasePriorityプロパティは、プロセスが終了したとき、またはプロセスが開始されていないときに、InvalidOperationException例外をスローする可能性があります(詳細については、 [〜#〜] msdn [〜#〜] を参照してください)。

1
Chansik Im

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

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

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

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

1
Pradeep Kumar