WaitForExit()抛出异常c#
下面是我的代码启动过程,已经把演示只有链接。我希望这个过程在后台运行而无需打开浏览器。另外第二行引发异常WaitForExit()抛出异常c#
未将对象引用设置为对象的实例。
var process=Process.Start("http://www.google.com");
process.WaitForExit();
因为当你启动一个进程间接你不会得到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
使用ShellExecuteEx
与SHELLEXECUTEINFO结构来启动该过程。阅读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()
。
thanx,所以我应该改变什么样的代码,任何帮助? –
你是什么意思间接? –
@AshBurlaczenko使用DDE或IDropTarget重新使用现有流程。 – Medinoc
Process.Start()
可以返回一个空引用:
返回值 类型:的System.Diagnostics.Process
与该处理资源,或零相关联的新Process组件中,如果没有过程资源开始(例如,如果现有进程被重用)。
(重点煤矿)
出现这种情况时,你会试图调用WaitForExit()
唉,当得到一个
NullReferenceException
!显然,你的'Process.Start(..)'已经失败了! –没有打开我的链接的浏览 –
但异常说你的'process' var是'null'!我不是在说这里打开的窗口,而是关于代码中的变量值... –