关于.net:来自C#进程类的无效操作异常

Invalid Operation Exception from C# Process Class

当我使用VSTS调试器查看类Process的实例的属性时,许多属性都用InvalidOperationException标记。为什么?我做错什么了吗?

我正在使用VSTS 2008 C#.Net 2.0开发控制台应用程序。

这是我的代码:

1
2
3
4
5
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


在拍摄调试器图片时您是否真的开始了该过程?这是我希望在调用Start()方法之前看到的屏幕截图。

请注意,常见的模式是创建一个ProcessStartInfo,填充它,然后调用静态的Process.Start(startInfo)方法。这使它在概念上更简单:Process对象在启动之前不会看到。


许多属性都标记有InvalidOperationException,因为直到启动该过程为止。对象" myProcess"未与任何正在运行的进程关联,因此无法获取该信息。

尝试在代码之后添加这些语句以启动进程

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

现在,当您位于if语句中时,VSTS调试器将能够显示与对象myProcess相关的大多数属性。发生这种情况的原因是,myProcess对象现在与正在运行的进程" IExplore.exe"相关联。


是的,这是预期的行为,并且在MSDN中也有明确记录。

例如,当进程退出或进程尚未启动时,Process.BasePriority属性可以引发InvalidOperationException异常(请参阅MSDN中的更多详细信息)。