WaitForExit()抛出异常c#

问题描述:

下面是我的代码启动过程,已经把演示只有链接。我希望这个过程在后台运行而无需打开浏览器。另外第二行引发异常WaitForExit()抛出异常c#

未将对象引用设置为对象的实例。

var process=Process.Start("http://www.google.com"); 
process.WaitForExit(); 
+0

唉,当得到一个NullReferenceException!显然,你的'Process.Start(..)'已经失败了! –

+0

没有打开我的链接的浏览 –

+0

但异常说你的'process' var是'null'!我不是在说这里打开的窗口,而是关于代码中的变量值... –

因为当你启动一个进程间接你不会得到Process对象(然后在你的情况过程中始终null和第二行抛出异常)。

让我解释一下我的意思与间接:如果你没有指定可执行,而是你给一个文件(或资源),那么这将是通过壳动词执行。在这种情况下,可以(重新)使用现有的过程。在这种情况下Process.Start()将返回null

试试这个:

  • 创建一个空的Word文档 'C:\ test.docx'。
  • 关闭所有Word实例。
  • 执行Process.Start(@"c:\test.docx"); // Returns a Process instance
  • 执行Process.Start(@"c:\test.docx"); // Returns null

你能简单地解决这个? AFAIK你不能因为Process使用ShellExecuteExSHELLEXECUTEINFO结构来启动该过程。阅读SHELLEXECUTEINFO文档hProcess字段您将会看到:

新启动的应用程序的句柄。该成员在返回时设置,并且始终为NULL,除非将fMask设置为SEE_MASK_NOCLOSEPROCESS。即使fMask设置为SEE_MASK_NOCLOSEPROCESS,如果没有进程启动,hProcess将为NULL。例如,如果要启动的文档是URL并且Internet Explorer的实例已在运行,则它将显示该文档。没有新进程启动,并且hProcess将为NULL。 注意即使作为调用的结果启动了一个进程,ShellExecuteEx也不会始终返回hProcess。例如,当您使用SEE_MASK_INVOKEIDLIST调用IContextMenu时,hProcess不会返回。

注意如果你正在运行一个新的进程刚刚打开一个URL,并获得服务器端生成的文件,那么你应该遵循Damien's suggestion并使用WebClient.DownloadFile()

+0

thanx,所以我应该改变什么样的代码,任何帮助? –

+0

你是什么意思间接? –

+0

@AshBurlaczenko使用DDE或IDropTarget重新使用现有流程。 – Medinoc

Process.Start()可以返回一个空引用:

返回值 类型:的System.Diagnostics.Process

与该处理资源,或零相关联的新Process组件中,如果没有过程资源开始(例如,如果现有进程被重用)。

(重点煤矿)

出现这种情况时,你会试图调用WaitForExit()