296 votes

Comment ouvrir dans le navigateur par défaut en C#

Je suis en train de concevoir une petite application C# qui contient un navigateur web. Actuellement, tous les paramètres par défaut de mon ordinateur indiquent que Google Chrome est mon navigateur par défaut, mais lorsque je clique sur un lien dans mon application pour l'ouvrir dans une nouvelle fenêtre, il ouvre Internet Explorer. Existe-t-il un moyen de faire en sorte que ces liens s'ouvrent dans le navigateur par défaut ? Ou y a-t-il un problème sur mon ordinateur ?

Mon problème est que j'ai un navigateur Web dans l'application, donc si vous allez sur Google et tapez "stack overflow" et cliquez avec le bouton droit de la souris sur le premier lien et cliquez sur "Ouvrir dans une nouvelle fenêtre", il s'ouvre dans IE au lieu de Chrome. Est-ce que c'est quelque chose que j'ai mal codé ou est-ce qu'il y a un paramètre qui n'est pas correct sur mon ordinateur ?

\===EDIT===

C'est vraiment ennuyeux. Je sais déjà que le navigateur est IE, mais il fonctionnait bien avant. Lorsque je cliquais sur un lien, il s'ouvrait dans Chrome. À l'époque, j'utilisais sharp develop pour créer l'application car je n'arrivais pas à faire démarrer c# express. J'ai fait une nouvelle installation de Windows et comme je n'étais pas très avancé dans mon application, j'ai décidé de recommencer, et maintenant j'ai ce problème. C'est pourquoi je ne sais pas si c'est mon ordinateur ou non. Pourquoi IE lancerait-il l'ensemble du navigateur lorsque l'on clique sur un lien au lieu d'ouvrir simplement le nouveau lien dans le navigateur par défaut ?

0 votes

Hehe, convaincre IE d'ouvrir Chrome pour toi va être un peu difficile. Eh bien, pas un peu. Cela ne fonctionne pas non plus si vous exécutez IE directement. Ou Chrome si IE est l'application par défaut.

0 votes

@SLaks Mono ? De quoi parlez-vous ?

0 votes

1) getstartMenuDir Recherche de Firefox ou Chrome StandartName Besure. si non trouvé. 2) obtenir la liste des emplacements d'installation standard qui existent 32 64 chrome ff utiliser cela. si non 3) dernier recours utiliser les réponses.

557voto

SLaks Points 391154

Vous pouvez simplement écrire

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

EDIT : Le site WebBrowser est une copie intégrée d'IE.
Par conséquent, tous les liens qu'il contient s'ouvriront dans IE.

Pour modifier ce comportement, vous pouvez manipuler l'option Navigating événement.

0 votes

C'est certainement la variante la plus courte. +Bonne remarque sur le problème de l'IE intégré.

1 votes

Essayez-le. Utilisez Taskmgr.exe, vous verrez deux copies de iexporer.exe en cours d'exécution. La navigation ne fonctionne pas pour la copie hors processus.

0 votes

Hein ? Navigating doit être déclenchée pour les liens dans le WebBrowser. Je n'ai jamais voulu dire que vous pouviez contrôler les liens dans la nouvelle fenêtre ; je voulais dire que vous pouviez manipuler Navigating pour supprimer la nouvelle fenêtre et appeler Process.Start .

87voto

Joel Harkes Points 6040

Pour ceux qui trouvent cette question dans dotnet core. J'ai trouvé une solution aquí

Code :

private void OpenUrl(string url)
{
    try
    {
        Process.Start(url);
    }
    catch
    {
        // hack because of this: https://github.com/dotnet/corefx/issues/10361
        if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
        {
            url = url.Replace("&", "^&");
            Process.Start(new ProcessStartInfo("cmd", $"/c start {url}") { CreateNoWindow = true });
        }
        else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
        {
            Process.Start("xdg-open", url);
        }
        else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
        {
            Process.Start("open", url);
        }
        else
        {
            throw;
        }
    }
}

0 votes

Merci ! cela fonctionne pour moi ... mais dans macos avec open au lieu de xdg-open

0 votes

@Equiman ne le fait-il pas ? RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ou est-ce que ce sera déjà vrai à Linux ?

0 votes

Je l'ai fait. Mais xdg-command renvoie "xdg-open : command not found". J'ai ensuite testé avec open le commandement et les travaux.

39voto

user2193090 Points 161
public static void GoToSite(string url)
{
     System.Diagnostics.Process.Start(url);
}

qui devrait résoudre votre problème

7 votes

Devrait être "static void GotoSite".

7 votes

Ne fonctionne pas dans .NET Core / .NET 5.0

0 votes

Dans mon cas, cela ne fonctionne que lorsque je lance l'application Windows avec des autorisations élevées. J'utilise l'application excel WPF sur Windows 10 avec Chrome comme navigateur par défaut. Une idée de la façon dont cela peut être corrigé pour que je n'aie pas à exécuter avec des autorisations élevées ?

28voto

Andreas Points 1278

Avez-vous essayé Process comme indiqué ici : http://msdn.microsoft.com/de-de/library/system.diagnostics.process.aspx ?

Vous pourriez utiliser

Process myProcess = new Process();

try
{
    // true is the default, but it is important not to set it to false
    myProcess.StartInfo.UseShellExecute = true; 
    myProcess.StartInfo.FileName = "http://some.domain.tld/bla";
    myProcess.Start();
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}

1 votes

UseShellExecute La valeur par défaut est true.

4 votes

@SLaks, merci. D'autre part, il est important de mentionner qu'il doit être true .

1 votes

Pour ceux qui sont trop paresseux pour vérifier... Le processus requiert "using System.Diagnostics".

26voto

Mayank Tripathi Points 353

Après avoir effectué de nombreuses recherches, je pense que la plupart des réponses données ne fonctionneront pas avec dotnet core. 1. System.Diagnostics.Process.Start("http://google.com") ; -- Ne fonctionnera pas avec dotnet core

Cela fonctionnera mais bloquera l'ouverture de la nouvelle fenêtre si le navigateur par défaut est chrome.

 myProcess.StartInfo.UseShellExecute = true; 
    myProcess.StartInfo.FileName = "http://some.domain.tld/bla";
    myProcess.Start();

Le modèle ci-dessous est le plus simple et fonctionnera dans tous les cas de figure.

Process.Start("explorer", url);

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