【问题标题】:Process.Start(url) broken on Windows 8/Chrome - are there alternatives?Windows 8/Chrome 上的 Process.Start(url) 损坏 - 有替代方案吗?
【发布时间】:2012-08-25 17:48:05
【问题描述】:

要从 .NET 应用程序打开 URL,许多网站 (including on StackOverflow) 都会引用此示例:

Process.Start("http://www.google.com/");

在 Windows 8 上,如果 Internet Explorer 是默认浏览器,则此方法有效。但是,如果 Google Chrome 是默认设置,则会失败并显示:

Unhandled Exception: System.ComponentModel.Win32Exception: Class not registered

这是否表明此方法不再是在 Windows 上打开 URL 的正确方法?存在哪些替代方案?直接启动 Internet Explorer 是否更安全?

【问题讨论】:

    标签: .net google-chrome process windows-8 process.start


    【解决方案1】:

    使用Launcher 对象打开网址。

    例子:

    await Launcher.LaunchUriAsync(new Uri("www.google.com"));
    

    【讨论】:

      【解决方案2】:

      您可以尝试明确指定进程文件名“explorer.exe”,如以下线程中建议的那样:

      http://social.msdn.microsoft.com/Forums/nl-BE/toolsforwinapps/thread/e051a102-469e-4ede-882c-c2c89377652a

      var startInfo = new ProcessStartInfo("explorer.exe", url);
      Process.Start(startInfo);
      

      【讨论】:

      • 当url包含特殊字符时,如=,则需要引用:Process.Start("explorer.exe", $"\"{url}\"");
      【解决方案3】:

      我尝试了很多解决方案,但由于我在 UI 项目(wpf 或 winform)中,我最终使用了嵌入式浏览器控件。调用导航,设置 url 然后目标为“_blank”会启动一个外部浏览器窗口。

      _webBrowser.Navigate(uri, "_blank");
      

      希望这会有所帮助。 直流

      【讨论】:

        【解决方案4】:

        这里描述了我发现的唯一可靠的解决方案:https://web.archive.org/web/20160304114550/http://www.seirer.net/blog/2014/6/10/solved-how-to-open-a-url-in-the-default-browser-in-csharp

        基本上,您需要查看 Windows 注册表以查找所选默认浏览器是什么,并将其作为进程直接启动,并以 URL 作为参数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-06-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-04
          • 1970-01-01
          • 2012-05-29
          • 2021-12-03
          相关资源
          最近更新 更多