Как открыть браузер по умолчанию в C # - PullRequest
223 голосов
/ 02 января 2011

Я разрабатываю небольшое приложение на C # и в нем есть веб-браузер.В настоящее время все настройки по умолчанию на моем компьютере говорят, что Google Chrome - это браузер по умолчанию, но когда я нажимаю ссылку в своем приложении, чтобы открыть в новом окне, он открывает Internet Explorer.Есть ли способ сделать эти ссылки открытыми в браузере по умолчанию?Или что-то не так на моем компьютере?

Моя проблема в том, что у меня есть веб-браузер в приложении, поэтому вы можете зайти в Google и ввести «переполнение стека», щелкнуть правой кнопкой мыши первую ссылку и нажать «Открыть».в новом окне »открывается в IE вместо Chrome.Это то, что я неправильно запрограммировал, или на моем компьютере неправильная настройка

=== РЕДАКТИРОВАТЬ ===

Это действительно раздражает.Я уже знаю, что браузер IE, но у меня раньше он работал нормально.Когда я нажал на ссылку, она открылась в Chrome.Я использовал Sharp Develop для создания приложения в то время, потому что я не мог получить C # Express для запуска.Я сделал новую установку Windows, и поскольку я не слишком далеко продвинулся в своем приложении, я решил начать все сначала, и теперь у меня возникла эта проблема.Вот почему я не уверен, что это мой компьютер или нет.Почему IE запускает весь браузер при нажатии на ссылку, а не просто открывает новую ссылку в браузере по умолчанию?

Ответы [ 11 ]

453 голосов
/ 02 января 2011

Вы можете просто написать

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

EDIT : Элемент управления WebBrowser является встроенной копией IE.
Следовательно, любые ссылки внутри него будут открываться в IE.

Чтобы изменить это поведение, вы можете обработать событие Navigating.

33 голосов
/ 25 апреля 2013
public static void GoToSite(string url)
{
     System.Diagnostics.Process.Start(url);
}

, которая должна решить вашу проблему

26 голосов
/ 05 апреля 2017

Для тех, кто находит этот вопрос в ядре 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;
        }
    }
}
12 голосов
/ 02 января 2011

Вы пробовали 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 голосов
/ 02 января 2011

Посмотрите на GeckoFX control .

GeckoFX - это компонент с открытым исходным кодом. что позволяет легко вставлять Mozilla Геккон (Firefox) в любую .NET Windows Форма заявки. Написано в чистоте, полностью прокомментировал C #, GeckoFX является идеальная замена по умолчанию Основанный на Internet Explorer веб-браузер контроль.

4 голосов
/ 28 января 2015

Попробуйте по-старому;)

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

используя: openit ("www.google.com");

3 голосов
/ 21 апреля 2015

Это открыло по умолчанию для меня:

System.Diagnostics.Process.Start(e.LinkText.ToString());
0 голосов
/ 08 апреля 2019

dotnet core выдает ошибку, если мы используем Process.Start(URL). Следующий код будет работать в dotnet core. Вы можете добавить любой браузер вместо Chrome.

var processes = Process.GetProcessesByName("Chrome");
var path  = processes.FirstOrDefault()?.MainModule?.FileName;
Process.Start(path,  url);
0 голосов
/ 08 августа 2018

обновить реестр текущей версией проводника
@ "Программное обеспечение \ 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);
0 голосов
/ 22 февраля 2018

Открыть динамически

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