web-dev-qa-db-de.com

Wie öffne ich eine Webseite aus meiner Anwendung?

Ich möchte, dass meine WPF-Anwendung den Standardbrowser öffnet und zu einer bestimmten Webseite wechselt. Wie mache ich das?

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

Eine von vielen Möglichkeiten.

245
Inisheer

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

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

Während eine gute Antwort gegeben wurde (mit Process.Start) ist es sicherer, sie in eine Funktion zu kapseln, die überprüft, ob die übergebene Zeichenfolge tatsächlich eine URI ist, um zu verhindern, dass versehentlich zufällige Prozesse auf dem Computer 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;
}
15
cdiggins

Microsoft erläutert dies im Artikel KB305703 zum Thema So starten Sie den Standard-Internetbrowser programmgesteuert mithilfe von Visual C # .

Vergessen Sie nicht, den Abschnitt zur Fehlerbehebung zu lesen.

9
mloskot

Sie können eine Webseite nicht über eine Anwendung mit erhöhten Rechten starten. Dies löst eine 0x800004005-Ausnahme aus, wahrscheinlich weil Explorer.exe und der Browser nicht mit erhöhten Rechten ausgeführt werden.

Verwenden Sie zum Starten einer Webseite aus einer erweiterten Anwendung in einem nicht erweiterten Webbrowser Code von Mike Feng . Ich habe versucht, die URL an lpApplicationName zu übergeben, aber das hat nicht funktioniert. Auch nicht, wenn ich CreateProcessWithTokenW mit lpApplicationName = "Explorer.exe" (oder iexplore.exe) und lpCommandLine = url verwende.

Die folgende Problemumgehung funktioniert: Erstellen Sie ein kleines EXE-Projekt mit einer Aufgabe: Process.Start (url). Verwenden Sie CreateProcessWithTokenW, um diese EXE-Datei auszuführen. Auf meinem Windows 8 RC funktioniert dies einwandfrei und öffnet die Webseite in Google Chrome.

5
lvmeijer

Hier ist mein vollständiger Code zum Öffnen.

es gibt 2 Möglichkeiten:

  1. mit Standardbrowser öffnen (Verhalten wie im Browserfenster)

  2. öffnen über Standardbefehlsoptionen (Verhalten wie bei Verwendung des Befehls "RUN.EXE")

  3. öffne über den 'Explorer' (das Verhalten ist so, als ob du eine URL in dein Ordnerfenster geschrieben hättest)

[optionaler Vorschlag] 4. Verwenden Sie den Speicherort des IEXPLORE-Prozesses, um die erforderliche 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 Hilfsfunktion:

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;
    }

Hoffe ich habe geholfen.

4
mr.baby123

Ich habe die Lösung dafür, weil ich heute ein ähnliches Problem habe.

Angenommen, Sie möchten http://google.com von einer App aus öffnen, die mit Administratorrechten ausgeführt wird:

ProcessStartInfo startInfo = new ProcessStartInfo("iexplore.exe", "http://www.google.com/");
Process.Start(startInfo); 
2
winsetter

Ich habe getestet, dass es perfekt funktioniert

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

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

Ich denke, dieses ist das am häufigsten verwendete:

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

Der alte Schulweg;)

public static void openit(string x) {
   System.Diagnostics.Process.Start("cmd", "/C start" + " " + x); 
}

Verwenden Sie: openit("www.google.com");

0
Moh.Kirkuk