176 votes

Comment ouvrir une page web à partir de mon application ?

Je veux que mon application WPF ouvre le navigateur par défaut et aille sur une certaine page web. Comment dois-je m'y prendre ?

365voto

Inisheer Points 11582

Pour les versions de bureau de .NET :

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

Pour .NET Core, la valeur par défaut pour ProcessStartInfo.UseShellExecute est passé de true a false et vous devez donc le définir explicitement comme suit true pour que cela fonctionne :

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

Pour compliquer encore les choses, cette propriété ne peut pas être réglé sur true pour les applications UWP (donc aucune de ces solutions n'est utilisable pour UWP).

3 votes

J'ai également utilisé cette méthode, mais il s'avère qu'elle ne fonctionne pas avec l'UAC. Dans mon application, j'ai ceci dans le manifeste <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> Lorsque je lance l'application sous Windows 8 (où vous ne pouvez plus désactiver l'UAC), j'obtiens l'exception suivante lors de l'ouverture d'une page Web : Win32Exception (0x80004005) : Classe non enregistrée à System.Diagnostics.Process.StartWithShellExecuteEx

0 votes

Cet effet ne se produit pas lorsque je change requireAdministrator en asInvoker. Mais alors l'application n'est pas élevée :-(

0 votes

La solution à l'exception "classe non enregistrée" est ici : stackoverflow.com/a/12248929/2440 (Ce n'est toutefois un problème que lorsqu'il est exécuté dans Visual Studio).

40voto

ajma Points 5637

J'ai utilisé cette ligne pour lancer le navigateur par défaut :

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

2 votes

Cette réponse est un doublon.

5 votes

@MAXE Les deux réponses ont été créées dans la même minute.

5voto

mr.baby123 Points 376

Voici mon code complet comment ouvrir.

il y a 2 options :

  1. ouvrir en utilisant le navigateur par défaut (le comportement est le même que pour l'ouverture dans la fenêtre du navigateur)

  2. ouvrir par le biais des options de commande par défaut (le comportement est le même que lorsque vous utilisez la commande "RUN.EXE")

  3. ouvrir à travers 'explorer' (le comportement est comme si vous aviez écrit l'url dans l'url de votre fenêtre de dossier)

[4. utilisez l'emplacement du processus d'iexplore pour ouvrir l'url requise.

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

et la fonction 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;
    }

J'espère avoir aidé.

5 votes

Ce que je me demande, c'est pourquoi rendre les choses si compliquées alors que plusieurs personnes ont déjà répondu très simplement à la question ?

0 votes

Pourquoi ne pas simplement utiliser SearchPath au lieu de votre propre GetWindowsPath ?

4 votes

Pourquoi des blocs de capture vides ? N'est-ce pas une mauvaise idée de simplement avaler les exceptions ?

4voto

lvmeijer Points 184

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 sont exécutés sans élévation.

Pour lancer une page web à partir d'une application en hauteur dans un navigateur web non en hauteur, utilisez la commande code réalisé par Mike Feng . J'ai essayé de passer 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éer un petit projet EXE qui a une tâche : Process.Start(url), utiliser CreateProcessWithTokenW pour exécuter ce .EXE. Sur mon ordinateur Windows 8 RC, cela fonctionne bien et ouvre la page web dans Google Chrome.

2 votes

Voir commentaire en utilisant Explorer.exe pour le désenfouissement n'est pas pris en charge : "Malheureusement, l'équipe Windows Shell a répondu que le comportement actuel de "Explorer.exe AppName.exe" est un bogue et pourrait ne pas fonctionner dans les futures mises à jour/versions de Windows. Les applications ne devraient pas s'y fier."

2voto

Ashish Kumar Points 31

J'ai testé, cela fonctionne parfaitement.

J'ai utilisé cette ligne pour lancer le navigateur par défaut :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X