#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