gpt4 book ai didi

c# - WaitForExit() 抛出异常 c#

转载 作者:行者123 更新时间:2023-11-30 14:57:30 29 4
gpt4 key购买 nike

下面是我启动该过程的代码,只放了演示链接。我希望这个过程在不打开浏览器的情况下在后台运行。第二行也抛出异常

Object reference not set to an instance of an object.

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

最佳答案

因为当你间接启动一个进程时,你不会得到Process对象(那么在你的情况下进程总是null和第二行抛出异常)。

让我解释一下我的意思是间接:如果您没有指定可执行文件但您提供了文档(或资源),那么它将执行通过 shell 动词。在这种情况下,可以(重新)使用现有流程。在这种情况下,Process.Start() 将返回 null

试试这个:

  • 创建一个空的 Word 文档“c:\test.docx”。
  • 关闭所有 Word 实例。
  • 执行 Process.Start(@"c:\test.docx");//返回一个流程实例
  • 执行 Process.Start(@"c:\test.docx");//返回空值

你能简单地解决这个问题吗?据我所知你不能因为 Process 使用 ShellExecuteExSHELLEXECUTEINFO结构来启动进程。阅读 SHELLEXECUTEINFO 文档的 hProcess 字段你会看到:

A handle to the newly started application. This member is set on return and is always NULL unless fMask is set to SEE_MASK_NOCLOSEPROCESS. Even if fMask is set to SEE_MASK_NOCLOSEPROCESS, hProcess will be NULL if no process was launched. For example, if a document to be launched is a URL and an instance of Internet Explorer is already running, it will display the document. No new process is launched, and hProcess will be NULL. Note ShellExecuteEx does not always return an hProcess, even if a process is launched as the result of the call. For example, an hProcess does not return when you use SEE_MASK_INVOKEIDLIST to invoke IContextMenu.

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

关于c# - WaitForExit() 抛出异常 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20701716/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com