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?
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
.
public static void GoToSite(string url)
{
System.Diagnostics.Process.Start(url);
}
ceci devrait régler votre problème
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;
}
}
}
Avez-vous essayé Process
comme 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);
}
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.
Cela a ouvert la valeur par défaut pour moi:
System.Diagnostics.Process.Start(e.LinkText.ToString());
Essayez ceci, à l’ancienne école;)
public static void openit(string x)
{
System.Diagnostics.Process.Start("cmd", "/C start" + " " + x);
}
using: openit ("www.google.com");
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);
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"));
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);