180 Stimmen

Wie kann ich eine Webseite aus meiner Anwendung heraus öffnen?

Ich möchte, dass meine WPF-Anwendung den Standardbrowser öffnet und eine bestimmte Webseite aufruft. Wie kann ich das tun?

374voto

Inisheer Punkte 19775

Für Desktop-Versionen von .NET:

System.Diagnostics.Process.Start("http://www.webpage.com");

Für .NET Core ist der Standard für ProcessStartInfo.UseShellExecute hat sich geändert von true a false und muss daher explizit auf true damit dies funktioniert:

System.Diagnostics.Process.Start(new ProcessStartInfo
    {
        FileName = "http://www.webpage.com",
        UseShellExecute = true
    });

Um die Sache noch weiter zu verkomplizieren, ist diese Eigenschaft kann nicht eingestellt werden auf true für UWP-Anwendungen (daher ist keine dieser Lösungen für UWP verwendbar).

3 Stimmen

Ich habe das auch benutzt, aber jetzt stellt sich heraus, dass es nicht mit UAC funktioniert. In meiner Anwendung habe ich dies im Manifest <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> Wenn ich die Anwendung unter Windows 8 ausführe (wo man die UAC nicht mehr deaktivieren kann), erhalte ich die folgende Ausnahme beim Öffnen einer Webseite: Win32Exception (0x80004005): Klasse nicht registriert bei System.Diagnostics.Process.StartWithShellExecuteEx

0 Stimmen

Dieser Effekt tritt nicht auf, wenn ich requireAdministrator in asInvoker ändere. Aber dann ist die App nicht erhöht :-(

69voto

Alexander Smirnov Punkte 1525

Akzeptierte Antwort funktioniert nicht mehr unter .NET Core 3 . Damit das funktioniert, verwenden Sie die folgende Methode:

var psi = new ProcessStartInfo
{
    FileName = url,
    UseShellExecute = true
};
Process.Start (psi);

41voto

ajma Punkte 11955

Ich habe diese Zeile verwendet, um den Standardbrowser zu starten:

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

28voto

cdiggins Punkte 16400

Es wurde zwar eine gute Antwort gegeben (mit Process.Start ), ist es sicherer, sie in eine Funktion zu kapseln, die prüft, ob die übergebene Zeichenkette tatsächlich ein URI ist, um zu vermeiden, dass versehentlich zufällige Prozesse auf dem Rechner gestartet werden.

public static bool IsValidUri(string uri)
{
    if (!Uri.IsWellFormedUriString(uri, UriKind.Absolute))
        return false;
    Uri tmp;
    if (!Uri.TryCreate(uri, UriKind.Absolute, out tmp))
        return false;
    return tmp.Scheme == Uri.UriSchemeHttp || tmp.Scheme == Uri.UriSchemeHttps;
}

public static bool OpenUri(string uri) 
{
    if (!IsValidUri(uri))
        return false;
     System.Diagnostics.Process.Start(uri);
     return true;
}

5voto

mr.baby123 Punkte 2040

Hier ist mein vollständiger Code zum Öffnen.

Es gibt 2 Möglichkeiten:

  1. Öffnen mit dem Standardbrowser (Verhalten wie beim Öffnen innerhalb des Browserfensters)

  2. Öffnen durch Standard-Befehlsoptionen (Verhalten wie beim Befehl "RUN.EXE")

  3. über den "Explorer" öffnen (das Verhalten ist so, als hätten Sie die URL in Ihr Ordnerfenster geschrieben)

[optionaler Vorschlag] 4. verwenden Sie iexplore process location, um die gewünschte URL zu öffnen

CODE:

internal static bool TryOpenUrl(string p_url)
    {
        // try use default browser [registry: HKEY_CURRENT_USER\Software\Classes\http\shell\open\command]
        try
        {
            string keyValue = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Software\Classes\http\shell\open\command", "", null) as string;
            if (string.IsNullOrEmpty(keyValue) == false)
            {
                string browserPath = keyValue.Replace("%1", p_url);
                System.Diagnostics.Process.Start(browserPath);
                return true;
            }
        }
        catch { }

        // try open browser as default command
        try
        {
            System.Diagnostics.Process.Start(p_url); //browserPath, argUrl);
            return true;
        }
        catch { }

        // try open through 'explorer.exe'
        try
        {
            string browserPath = GetWindowsPath("explorer.exe");
            string argUrl = "\"" + p_url + "\"";

            System.Diagnostics.Process.Start(browserPath, argUrl);
            return true;
        }
        catch { }

        // return false, all failed
        return false;
    }

und die Funktion Helper:

internal static string GetWindowsPath(string p_fileName)
    {
        string path = null;
        string sysdir;

        for (int i = 0; i < 3; i++)
        {
            try
            {
                if (i == 0)
                {
                    path = Environment.GetEnvironmentVariable("SystemRoot");
                }
                else if (i == 1)
                {
                    path = Environment.GetEnvironmentVariable("windir");
                }
                else if (i == 2)
                {
                    sysdir = Environment.GetFolderPath(Environment.SpecialFolder.System);
                    path = System.IO.Directory.GetParent(sysdir).FullName;
                }

                if (path != null)
                {
                    path = System.IO.Path.Combine(path, p_fileName);
                    if (System.IO.File.Exists(path) == true)
                    {
                        return path;
                    }
                }
            }
            catch { }
        }

        // not found
        return null;
    }

Ich hoffe, ich konnte helfen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X