Ich möchte, dass meine WPF-Anwendung den Standardbrowser öffnet und zu einer bestimmten Webseite wechselt. Wie mache ich das?
Ich möchte, dass meine WPF-Anwendung den Standardbrowser öffnet und zu einer bestimmten Webseite wechselt. Wie mache ich das?
Antworten:
System.Diagnostics.Process.Start("http://www.webpage.com");
Eine von vielen Möglichkeiten.
Obwohl 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 vermeiden, 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;
}
Akzeptierte Antwort funktioniert unter .NET Core 3 nicht mehr . Verwenden Sie die folgende Methode, damit es funktioniert:
var psi = new ProcessStartInfo
{
FileName = url,
UseShellExecute = true
};
Process.Start (psi);
Microsoft erklärt dies im Artikel KB305703 zum programmgesteuerten Starten des Standard-Internetbrowsers mithilfe von Visual C # .
Vergessen Sie nicht, den Abschnitt zur Fehlerbehebung zu lesen.
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 erhöht ausgeführt werden.
Verwenden Sie den von Mike Feng erstellten Code, um eine Webseite von einer erhöhten Anwendung in einem nicht erhöhten Webbrowser aus zu starten . 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. Unter meinem Windows 8 RC funktioniert dies einwandfrei und öffnet die Webseite in Google Chrome.
Explorer.exe
zum De-Elevieren wird nicht unterstützt: "Leider hat das Windows Shell-Team geantwortet, dass das aktuelle Verhalten von" Explorer.exe AppName.exe "ein Fehler ist und möglicherweise in zukünftigen Updates / Versionen von Windows nicht funktioniert. Anwendungen sollte sich nicht darauf verlassen. "
Hier ist mein vollständiger Code zum Öffnen.
Es gibt 2 Möglichkeiten:
Öffnen mit dem Standardbrowser (Verhalten ist wie im Browserfenster geöffnet)
Öffnen über Standardbefehlsoptionen (Verhalten entspricht der Verwendung des Befehls "RUN.EXE")
über 'Explorer' öffnen (Verhalten ist so, als hätten Sie eine URL in die URL Ihres Ordnerfensters geschrieben)
[optionaler Vorschlag] 4. Verwenden Sie den iexplore-Prozessspeicherort, um die erforderliche URL zu öffnen
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;
}
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.
GetWindowsPath
?
Der alte Schulweg;)
public static void openit(string x) {
System.Diagnostics.Process.Start("cmd", "/C start" + " " + x);
}
Verwenden: openit("www.google.com");
Ich habe die Lösung dafür, weil ich heute ein ähnliches Problem habe.
Angenommen, Sie möchten http://google.com über eine App öffnen, die mit Administratorrechten ausgeführt wird:
ProcessStartInfo startInfo = new ProcessStartInfo("iexplore.exe", "http://www.google.com/");
Process.Start(startInfo);