Process.Start(url) broken on Windows 8/Chrome - are there alternatives?
Asked Answered
J

5

23

To open a URL from a .NET application, many sites (including on StackOverflow) cite this example:

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

On Windows 8, this works if Internet Explorer is the default browser. However if Google Chrome is the default, it fails with:

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

Does this suggest that this method is no longer the right way to open URL's on Windows? What alternatives exist? Is it safer to just launch Internet Explorer directly?

Jolee answered 30/8, 2012 at 22:17 Comment(0)
C
27

You may try to specify the Process filename "explorer.exe" explicitly, like suggested in the following thread:

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);
Chumash answered 3/9, 2012 at 13:34 Comment(1)
When the url contains special characters, like =, then it need to be quoted: Process.Start("explorer.exe", $"\"{url}\"");Montpellier
H
1

Use the Launcher object to open URLs.

Example:

await Launcher.LaunchUriAsync(new Uri("www.google.com"));
Hearth answered 31/8, 2012 at 0:34 Comment(0)
S
1

I've tried many a solution but as i'm in a UI project (wpf or winform) I ended up using an embedded browser control. Calling navigate, setting the url then target to "_blank" launches an external browser window.

_webBrowser.Navigate(uri, "_blank");

Hope this helps. DC

Selfassured answered 1/3, 2013 at 17:17 Comment(0)
R
0

The only robust solution I've found to this problem is described here: 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

Basically, you need to look through the Windows registry to find what the selected default browser is, and launch that directly as the process with the URL as the argument.

Recover answered 13/8, 2018 at 21:59 Comment(0)
C
0

VB.Net alternative:

    Public Sub URLOpen(Url As String)

       Dim OpenURL As New ProcessStartInfo With {
        .UseShellExecute = True,
        .FileName = "explorer.exe",
        .Arguments = Url
       }

       Process.Start(OpenURL)

    End Sub
Cadel answered 8/7, 2022 at 19:33 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.