web-dev-qa-db-fra.com

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

Je conçois une petite application C # dans laquelle se trouve un navigateur Web. Toutes les valeurs par défaut de mon ordinateur sont actuellement définies par Google. Google Chrome est mon navigateur par défaut. Toutefois, lorsque je clique sur un lien de mon application pour l'ouvrir dans une nouvelle fenêtre, Internet Explorer s'ouvre. Existe-t-il un moyen de rendre ces liens ouverts dans le navigateur par défaut? Ou y a-t-il quelque chose qui ne va pas sur mon ordinateur?

Mon problème est que j'ai un navigateur Web dans l'application, alors disons que vous allez sur google et tapez "stack overflow", faites un clic droit sur le premier lien et cliquez sur "Ouvrir dans une nouvelle fenêtre". Il s'ouvre dans IE au lieu de Chrome. . Est-ce quelque chose que j'ai mal codé ou y a-t-il un paramètre incorrect sur mon ordinateur?

=== EDIT ===

C'est vraiment énervant. Je sais déjà que le navigateur est IE, mais je l’avais bien fonctionné auparavant. Quand j'ai cliqué sur un lien, il s'est ouvert en chrome. J'utilisais sharp develop pour effectuer l'application à ce moment-là, car je ne pouvais pas utiliser c # express pour démarrer. J'ai fait une nouvelle installation de Windows et, comme je n'étais pas trop 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'intégralité du navigateur lorsqu'un clic est effectué sur un lien plutôt que d'ouvrir simplement le nouveau lien dans le navigateur par défaut?

215
Sean

Vous pouvez simplement écrire 

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

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

Pour changer ce comportement, vous pouvez gérer l'événement Navigating.

439
SLaks
public static void GoToSite(string url)
{
     System.Diagnostics.Process.Start(url);
}

ceci devrait régler votre problème

33
user2193090

Pour ceux qui trouvent cette question dans le noyau de dotnet. J'ai trouvé une solution ici

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;
        }
    }
}
23
Joel Harkes

Avez-vous essayé Processcomme mentionné 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);
}
12
Andreas

Jetez un coup d'œil au Contrôle GeckoFX .

GeckoFX est un composant open-source ce qui facilite l'intégration de Mozilla Gecko (Firefox) dans n’importe quel Windows .NET Demande de formulaires. Écrit en clair, entièrement commenté C #, GeckoFX est le remplacement parfait pour le défaut Navigateur Web basé sur Internet Explorer contrôle.

5
THE DOCTOR

Cela a ouvert la valeur par défaut pour moi:

System.Diagnostics.Process.Start(e.LinkText.ToString());
3
Xero Phane

Essayez ceci, à l’ancienne école;)

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

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

1
Moh.Kirkuk

mettre à jour le registre avec la version actuelle de l'explorateur
@ "Logiciel\Microsoft\Internet Explorer\Principal\FeatureControl\FEATURE_BROWSER_EMULATION"

public enum BrowserEmulationVersion
{
    Default = 0,
    Version7 = 7000,
    Version8 = 8000,
    Version8Standards = 8888,
    Version9 = 9000,
    Version9Standards = 9999,
    Version10 = 10000,
    Version10Standards = 10001,
    Version11 = 11000,
    Version11Edge = 11001
}

key.SetValue(programName, (int)browserEmulationVersion, RegistryValueKind.DWord);
0
dfgv

Ouvrir dynamiquement

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

En UWP:

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

dotnet core génère une erreur si nous utilisons Process.Start(URL). Le code suivant fonctionnera dans dotnet core. Vous pouvez ajouter n’importe quel navigateur au lieu de Chrome.

var processes = Process.GetProcessesByName("Chrome");
var path  = processes.FirstOrDefault()?.MainModule?.FileName;
Process.Start(path,  url);
0