Je souhaite que mon application WPF ouvre le navigateur par défaut et accède à une certaine page Web. Comment je fais ça?
Je souhaite que mon application WPF ouvre le navigateur par défaut et accède à une certaine page Web. Comment je fais ça?
Réponses:
System.Diagnostics.Process.Start("http://www.webpage.com");
Une des nombreuses façons.
La réponse acceptée ne fonctionne plus sur .NET Core 3 . Pour le faire fonctionner, utilisez la méthode suivante:
var psi = new ProcessStartInfo
{
FileName = url,
UseShellExecute = true
};
Process.Start (psi);
Bien qu'une bonne réponse ait été donnée (en utilisant Process.Start
), il est plus sûr de l'encapsuler dans une fonction qui vérifie que la chaîne passée est bien un URI, pour éviter de démarrer accidentellement des processus aléatoires sur la machine.
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;
}
Microsoft l'explique dans l' article KB305703 sur la façon de démarrer le navigateur Internet par défaut par programme à l'aide de Visual C # .
N'oubliez pas de consulter la section Dépannage.
Vous ne pouvez pas lancer une page Web à partir d'une application élevée. Cela déclenchera une exception 0x800004005, probablement parce qu'explorer.exe et le navigateur s'exécutent sans élévation de privilèges.
Pour lancer une page Web à partir d'une application élevée dans un navigateur Web non élevé, utilisez le code créé par Mike Feng . J'ai essayé de transmettre l'URL à lpApplicationName mais cela n'a pas fonctionné. Pas non plus lorsque j'utilise CreateProcessWithTokenW avec lpApplicationName = "explorer.exe" (ou iexplore.exe) et lpCommandLine = url.
La solution de contournement suivante fonctionne: Créez un petit projet EXE qui a une tâche: Process.Start (url), utilisez CreateProcessWithTokenW pour exécuter ce .EXE. Sur mon Windows 8 RC, cela fonctionne bien et ouvre la page Web dans Google Chrome.
Explorer.exe
pour désélever n'est pas prise en charge: "Malheureusement, l'équipe Windows Shell a répondu que le comportement actuel de" Explorer.exe AppName.exe "était un bogue et pourrait ne pas fonctionner dans les futures mises à jour / versions de Windows. Applications ne devrait pas s’y fier. "
Voici mon code complet comment ouvrir.
il y a 2 options:
ouvrir en utilisant le navigateur par défaut (le comportement est comme ouvert dans la fenêtre du navigateur)
ouvrir via les options de commande par défaut (le comportement est comme vous utilisez la commande "RUN.EXE")
ouvrir via 'explorer' (le comportement est comme vous avez écrit l'URL dans l'url de la fenêtre de votre dossier)
[suggestion facultative] 4. utilisez l'emplacement du processus iexplore pour ouvrir l'url requise
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;
}
J'espère que j'ai aidé.
GetWindowsPath
?
La vieille école;)
public static void openit(string x) {
System.Diagnostics.Process.Start("cmd", "/C start" + " " + x);
}
Utilisation: openit("www.google.com");
J'ai la solution pour cela car j'ai un problème similaire aujourd'hui.
Supposons que vous souhaitiez ouvrir http://google.com à partir d'une application exécutée avec des privilèges d'administrateur:
ProcessStartInfo startInfo = new ProcessStartInfo("iexplore.exe", "http://www.google.com/");
Process.Start(startInfo);