Как открыть браузер по умолчанию в С#
Я разрабатываю небольшое приложение С#, и в нем есть веб-браузер. В настоящее время у меня есть все мои настройки по умолчанию на моем компьютере. Google Chrome - мой браузер по умолчанию, но когда я нажимаю ссылку в своем приложении для открытия в новом окне, он открывает Internet Explorer. Есть ли способ открыть эти ссылки в браузере по умолчанию? Или что-то не так на моем компьютере?
Моя проблема в том, что у меня есть веб-браузер в приложении, поэтому скажите, что вы заходите в google и введите "переполнение стека" и щелкните правой кнопкой мыши по первой ссылке и нажмите "Открыть в новом окне", которая открывается в IE вместо Chrome. Я что-то неправильно кодировал или не настроен на моем компьютере.
=== РЕДАКТИРОВАТЬ ===
Это действительно раздражает. Я уже знаю, что браузер - это IE, но раньше он работал нормально. Когда я нажал ссылку, она открылась в хроме. Я использовал резкое развитие, чтобы сделать приложение в то время, потому что я не мог получить С# express для запуска. Я сделал новые окна, и, поскольку я не был слишком далеко в своем приложении, я решил начать все сначала, и теперь у меня возникает эта проблема. Вот почему я не уверен, что это мой компьютер или нет. Почему IE запускает весь браузер при щелчке ссылки, а не просто открывает новую ссылку в браузере по умолчанию?
Ответы
Ответ 1
Вы можете просто написать
System.Diagnostics.Process.Start("http://google.com");
EDIT: Элемент WebBrowser
- встроенная копия IE.
Поэтому любые ссылки внутри него будут открываться в IE.
Чтобы изменить это поведение, вы можете обработать событие Navigating
.
Ответ 2
public static void GoToSite(string url)
{
System.Diagnostics.Process.Start(url);
}
это должно решить вашу проблему
Ответ 3
Для тех, кто находит этот вопрос в ядре dotnet. Я нашел решение здесь
код:
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;
}
}
}
Ответ 4
Вы попробовали Process
, как упоминалось здесь: http://msdn.microsoft.com/de-de/library/system.diagnostics.process.aspx?
Вы можете использовать
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);
}
Ответ 5
Взгляните на элемент управления GeckoFX.
GeckoFX - это компонент с открытым исходным кодом, который упрощает внедрение Mozilla Gecko (Firefox) в любое приложение.NET Windows Forms. Написанная в чистом, полностью комментируемом С#, GeckoFX - идеальная замена для стандартного WebBrowser на основе Internet Explorer.
Ответ 6
Попробуйте это, старый школьный путь;)
public static void openit(string x)
{
System.Diagnostics.Process.Start("cmd", "/C start" + " " + x);
}
используя: openit ( "www.google.com" );
Ответ 7
Это открыло для меня значение по умолчанию:
System.Diagnostics.Process.Start(e.LinkText.ToString());
Ответ 8
dotnet core
выдает ошибку, если мы используем Process.Start(URL)
. Следующий код будет работать в dotnet core
. Вы можете добавить любой браузер вместо Chrome
.
var processes = Process.GetProcessesByName("Chrome");
var path = processes.FirstOrDefault()?.MainModule?.FileName;
Process.Start(path, url);
Ответ 9
В UWP:
await Launcher.LaunchUriAsync(new Uri("http://google.com"));
Ответ 10
Открыть динамически
string addres= "Print/" + Id + ".htm";
System.Diagnostics.Process.Start(Path.Combine(Environment.CurrentDirectory, addres));
Ответ 11
обновить реестр текущей версией проводника
@"Программное обеспечение \Microsoft\Internet Explorer\Main\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);
Ответ 12
Я знаю это поздно, но также взгляну на это
Если вы хотите открывать несколько ссылок одновременно с каждым новым окном, см. Здесь