0

以下代码导致 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:没有进程与此对象关联。

4

1 回答 1

4

从 MSDN,Process.Start 将返回:

如果没有启动进程资源(例如,如果重用现有进程),则与进程资源或空引用(Visual Basic 中的 Nothing)关联的新进程组件 。

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

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

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

...这对我来说很合适。不过,它确实需要您指定浏览器可执行文件。

于 2009-05-18T22:48:21.530 回答