无法在C#中打开链接

4
如果我尝试使用以下代码: System.Diagnostics.Process.Start("http://google.com"); 就会出现以下错误:

System.ComponentModel.Win32Exception: “指定的系统找不到文件”

我使用的是win10和visual studio。实际上,我无法找到解决方法或类似的东西。也许是因为我在代理后面?还是有其他问题?如果是这样的话,你能帮我修复吗?

@derloopkat,不,System.Diagnostics.Process.Start也可以在您的默认Web应用程序中打开链接。 - Aousaf Rashid
如果您正在使用 .Net Core,这个答案可能会有所帮助。 - Diado
无法复现。那段代码按预期工作。 - Steve
@Steve 这就是问题所在... 我觉得如果这个错误很普遍的话,我应该能在另一个线程中找到解决方案 :P - Morta
如果你无法使其工作,那么你的机器上可能存在某种问题,这些链接与你的默认浏览器之间没有关联。很高兴你已经找到了一个解决方法。 - Steve
2个回答

12

你可以尝试以下解决方法:

System.Diagnostics.Process.Start("cmd","/c start http://www.google.com");

1
@Morta:我刚刚采用了另一种方法。你可以在https://ss64.com/nt/start.html上找到更多详细信息。 - SpiderCode
@Morta,看看我的解决方案吧 :) 而且SpiderCoder,值得点赞。 - Aousaf Rashid
2
谢谢,这个解决方案对我很有帮助。我发现你也可以使用System.Diagnostics.Process.Start(new ProcessStartInfo("http://google.com"){ UseShellExecute=true}); - RamWill

1

我认为我应该在这里记录下来,因为我没有看到很多答案解释为什么会出现这个错误。

你面临的实际问题是你使用了错误的重载。此重载仅接受文件或文档名称作为参数。根据MSDN,URL不被视为文档。

你可以在此处文档中的一个示例中找到该语句...

https://msdn.microsoft.com/en-us/library/53ezey2s(v=vs.110).aspx

enter image description here

现在,正确的重载是...
System.Diagnostics.Process.Start(string fileName, string arguments);

其中filename是要启动的进程的名称(例如Chrome等),而在这种情况下,arguments将是传递给该进程的URL。

更多信息请参见此处...

https://msdn.microsoft.com/en-us/library/h6ak8zt5(v=vs.110).aspx


谢谢。但实际上,如果我使用 Process.Start("IExplore.exe", "www.google.com");, 同样的错误会发生... - Morta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接