web-dev-qa-db-fra.com

Comment ouvrir une page Web à partir de mon application?

Je souhaite que mon application WPF ouvre le navigateur par défaut et accède à une page Web donnée. Comment je fais ça?

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

Une des nombreuses façons.

245
Inisheer

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

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

Bien qu'une bonne réponse ait été donnée (en utilisant Process.Start), il est préférable de l’encapsuler dans une fonction qui vérifie que la chaîne transmise est bien un URI, afin d’é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;
}
15
cdiggins

Microsoft l'explique dans l'article KB305703 sur Comment démarrer le navigateur Internet par défaut par programmation à l'aide de Visual C # .

N'oubliez pas de consulter la section Dépannage.

9
mloskot

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.

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é. Ce n’est également pas le cas lorsque j’utilise CreateProcessWithTokenW avec lpApplicationName = "Explorer.exe" (ou iexplore.exe) et lpCommandLine = url.

La solution suivante fonctionne: Créez un petit projet EXE comportant une tâche: Process.Start (url), utilisez CreateProcessWithTokenW pour exécuter ce fichier .EXE. Sur mon Windows 8 RC, cela fonctionne correctement et ouvre la page Web dans Google Chrome.

5
lvmeijer

Voici mon code complet comment ouvrir.

il y a 2 options:

  1. ouvrir en utilisant le navigateur par défaut (le comportement est comme ouvert dans la fenêtre du navigateur)

  2. ouvrir avec les options de commande par défaut (le comportement est comme si vous utilisiez la commande "RUN.EXE")

  3. ouvrir via 'Explorer' (le comportement est comme si vous aviez é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

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 que j'ai aidé.

4
mr.baby123

J'ai la solution pour cela parce que j'ai un problème similaire aujourd'hui.

Supposons que vous vouliez ouvrir http://google.com à partir d'une application fonctionnant avec des privilèges d'administrateur:

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

J'ai testé ça marche parfaitement

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

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

Je pense que celui-ci est le plus utilisé:

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

La vieille école;)

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

Utilisez: openit("www.google.com");

0
Moh.Kirkuk