Проблемы с открытием браузера по умолчанию

#vb.net #webbrowser-control

#vb.net #webbrowser-управление

Вопрос:

Я хочу открыть веб-страницу из VB.NET приложение, использующее браузер по умолчанию (Chrome в моем случае).

Я использую этот код:

 Dim BrowserRegistryString As String = My.Computer.Registry.ClassesRoot.OpenSubKey("httpshellopencommand").GetValue("").ToString
Dim DefaultBrowserPath As String = System.Text.RegularExpressions.Regex.Match(BrowserRegistryString, "("".*?"")").Captures(0).ToString
Process.Start(DefaultBrowserPath, "http://www.example.com")
 

Он работает довольно хорошо, за исключением того, что он открывает веб-сайт в Microsoft Edge, если я использую «пуск http://www.example.com » в оболочке он открывает сайт в Chrome.
Chrome настроен как мой браузер по умолчанию (из панели настроек Windows 10), поэтому…

… откуда взялась эта загадка?

Комментарии:

1. Если вы хотите открыть веб-браузер по умолчанию, почему бы просто Process.Start("http://www.example.com") не?

2. Потому что это не работает. Я получил это исключение: «Система. ComponentModel.Win32Exception: «Файл не найден»

3. Что. Вы используете сетевую версию? Вы пробовали запускать приложение с повышенными правами? Или добавить runas глагол?

4. Я использовал .NET 5.0, я не знаю, что вы имели в виду, говоря «запустить приложение с повышенными правами» и «добавить глагол runas». :/

5. В любом. Приложение Net Core (или производное от .Net Core, как .Net 5), UseShellExecute is false , в то время как в .Net Framework есть true . Поэтому вам нужно установить его с true помощью Process.ProcessStartInfo . — Приложение с повышенными правами запускается с правами администратора, аналогично использованию глагола runas , чтобы попросить пользователя предоставить права администратора вызывающему процессу.

Ответ №1:

Вот код, который я использовал, и он работает как шарм. Я думаю, есть лучший способ извлечь путь к браузеру по умолчанию без параметров…

 Public Function GetDefaultBrowser() As String
        Dim strDefaultBrowserPathTemp As String
        Dim intPosDefaultBrowserFileExtension As Int16
        Using userChoiceKey As RegistryKey = Registry.CurrentUser.OpenSubKey("SoftwareMicrosoftWindowsShellAssociationsUrlAssociationshttpUserChoice")
            If userChoiceKey IsNot Nothing Then
                Dim progIdValue As Object = userChoiceKey.GetValue("Progid")
                If progIdValue IsNot Nothing Then
                    strDefaultBrowserPathTemp = My.Computer.Registry.GetValue("HKEY_CLASSES_ROOT" amp; userChoiceKey.GetValue("Progid") amp; "shellopencommand", "", Nothing).ToString
                    intPosDefaultBrowserFileExtension = strDefaultBrowserPathTemp.IndexOf(".exe" amp; Chr(34))
                    Return Left(strDefaultBrowserPathTemp, intPosDefaultBrowserFileExtension   Len(".exe" amp; Chr(34)))
                End If
            End If
        End Using
End Function