web-dev-qa-db-fra.com

Comment puis-je lancer une URL dans le navigateur par défaut de l'utilisateur à partir de mon application?

Comment puis-je avoir un bouton dans mon application de bureau qui provoque le navigateur par défaut de l'utilisateur pour lancer et afficher une URL fournie par la logique de l'application.

30
Aaron Anodide
 Process.Start("http://www.google.com");
60
Darin Dimitrov

Process.Start ([votre URL]) est en effet la réponse, dans tous les cas, sauf dans des cas extrêmement niches. Pour être complet, cependant, je mentionnerai que nous avons rencontré un tel cas de niche il y a quelque temps: si vous essayez d'ouvrir une URL "file: \" (dans notre cas, pour afficher la copie installée localement de notre aide Web), lors du lancement à partir du shell, les paramètres de l'url ont été supprimés.

Notre solution plutôt hackée, que je déconseille à moins que vous ne rencontriez un problème avec la solution "correcte", ressemblait à ceci:

Dans le gestionnaire de clic du bouton:

string browserPath = GetBrowserPath();
if (browserPath == string.Empty)
    browserPath = "iexplore";
Process process = new Process();
process.StartInfo = new ProcessStartInfo(browserPath);
process.StartInfo.Arguments = "\"" + [whatever url you're trying to open] + "\"";
process.Start();

La fonction laide que vous ne devriez pas utiliser à moins que Process.Start ([votre URL]) ne fasse pas ce que vous attendez:

private static string GetBrowserPath()
{
    string browser = string.Empty;
    RegistryKey key = null;

    try
    {
        // try location of default browser path in XP
        key = Registry.ClassesRoot.OpenSubKey(@"HTTP\Shell\open\command", false);

        // try location of default browser path in Vista
        if (key == null)
        {
            key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http", false); ;
        }

        if (key != null)
        {
            //trim off quotes
            browser = key.GetValue(null).ToString().ToLower().Replace("\"", "");
            if (!browser.EndsWith("exe"))
            {
                //get rid of everything after the ".exe"
                browser = browser.Substring(0, browser.LastIndexOf(".exe") + 4);
            }

            key.Close();
        }
    }
    catch
    {
        return string.Empty;
    }

    return browser;
}
20
neminem