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.

3voto

Xero Phane Points 76

Cela a ouvert le défaut pour moi :

System.Diagnostics.Process.Start(e.LinkText.ToString());

0 votes

Utilisez-vous un package qui donne à EventArgs la propriété de LinkText ?

2voto

Suis-je le seul à avoir trop peur d'appeler System.Diagnostics.Process.Start() sur une chaîne que je viens de lire sur internet ?

        public bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect)
        {
            Request = request;
            string url = Request.Url;

            if (Request.TransitionType != TransitionType.LinkClicked)
            {   // We are only changing the behavoir when someone clicks on a link.
                // Let the embedded browser handle this request itself.
                return false;
            }
            else
            {   // The user clicked on a link.  Something like a filter icon, which links to the help for that filter.
                // We open a new window for that request.  This window cannot change.  It is running a JavaScript
                // application that is talking with the C# main program.
                Uri uri = new Uri(url);
                try
                {
                    switch (uri.Scheme)
                    {
                        case "http":
                        case "https":
                            {   // Stack overflow says that this next line is *the* way to open a URL in the
                                // default browser.  I don't trust it.  Seems like a potential security
                                // flaw to read a string from the network then run it from the shell.  This
                                // way I'm at least verifying that it is an http request and will start a
                                // browser.  The Uri object will also verify and sanitize the URL.
                                System.Diagnostics.Process.Start(uri.ToString());
                                break;
                            }
                        case "showdevtools":
                            {
                                WebBrowser.ShowDevTools();
                                break;
                            }
                    }
                }
                catch { }
                // Tell the browser to cancel the navigation.
                return true;
            }
        }

Ce code a été conçu pour fonctionner avec CefSharp, mais devrait être facile à adapter.

1voto

Kibernetik Points 805

Dans UWP :

await Launcher.LaunchUriAsync(new Uri("http://google.com"));

0 votes

C'est Lanceur.LaunchUriAsync . Suivez le lien pour un exemple complet. Il est intéressant de noter que la valeur de retour permet à l'appelant de savoir si l'URL a été ouverte ou non. Attention, ceci est pour Windows 8/Server2012/Phone8 et plus. Si le logiciel doit être compatible avec des versions plus anciennes, il ne peut pas utiliser cela.

1voto

J'ai essayé

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

ce qui fonctionne dans la plupart des cas, mais je rencontre un problème avec une url qui pointe vers un fichier :

Le système ne trouve pas le fichier spécifié.

Alors, j'ai essayé cette solution qui fonctionne avec une petite modification :

System.Diagnostics.Process.Start("explorer.exe", $"\"{uri}\"");

Sans envelopper l'url avec "" l'explorateur ouvre votre dossier de documents.

0 votes

Donc, en gros, votre réponse est un commentaire ou au moins un duplicata.

0 votes

@Vega Désolé, je n'avais pas assez de réputation pour ajouter un commentaire .... J'ai ajouté cette réponse car cette modification n'est pas mentionnée dans ce fil.

0 votes

Cela a (enfin) corrigé le bug "cannot find the file" pour moi sur .Net Core.

0voto

Ouvrir dynamiquement

string addres= "Print/" + Id + ".htm";
           System.Diagnostics.Process.Start(Path.Combine(Environment.CurrentDirectory, addres));

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