Process.WaitForExit()导致NullReferenceException

时间:2009-05-18 22:31:45

标签: .net vb.net system.diagnostics

以下代码导致NullReferenceException

tStartParameter = String.Format(tStartParameter, tTo, tSubject)
tProcess = Process.Start(New ProcessStartInfo(tStartParameter) _
           With {.UseShellExecute = True})
tProcess.WaitForExit()

tStartParameter是:

https://mail.google.com/?view=cm&fs=1&tf=1&to=t@example.com&su=boogaloo!!

使用调试器我看到Process.Start返回null。那么..有关为什么会这样的想法?我真的想阻止程序执行,直到用户完成启动过程。

更新: 将代码重构为:

tStartParameter = String.Format(tStartParameter, tTo, tSubject)
tProcess = New Process
tProcess.StartInfo = New ProcessStartInfo(tStartParameter) _
                     With {.UseShellExecute = True}
tProcess.Start()
tProcess.WaitForExit()

导致此异常:

  

InvalidOperationException:没有进程与此对象关联。

1 个答案:

答案 0 :(得分:4)

从MSDN,Process.Start将返回:

  

一个新的Process组件   与流程资源相关联,   或null引用   (在Visual Basic中没有任何内容),如果没有   流程资源已启动(for   例如,如果现有流程是   重复使用)。

在您的情况下,由于您将URL传递给Process.Start而不是可执行文件,因此您实际上并未启动新进程。您将URL传递给iexplore,或者您的浏览器。所以你得到一个空的回来。

在任何情况下,“阻止程序执行直到用户完成启动的进程”意味着什么?等到用户关闭Web浏览器?在这种情况下,您可能需要以下内容:

Process p = Process.Start("iexplore", "http://www.google.com");
p.WaitForExit();

......适合我。但它确实要求您指定浏览器可执行文件。