У меня есть следующий код для открытия URL-адреса в браузере по умолчанию:
string url;
//...
Process.Start(url);
Но это не сработает и выдаст Win32Exception с каким-то URL, например:
https://tw.news.yahoo.com/%E6%95%B8%E4%BD%8D%E8%BA%AB%E5%88%86%E8%AD%89%E6%93%AC9%E6%9C%88%E6%8F%90%E6%A8%A3%E5%BC%B5-%E5%BE%90%
Трассировка стека выглядит так:
System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified.
at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start(String fileName)
at MyApp.GoURL(String url)
Я переключал браузеры по умолчанию с Firefox на Chrome, Edge, Brave и т. д.
И я попробовал некоторые обходные пути в эта проблема с дотнетом,
Process.Start(
new ProcessStartInfo("cmd", $"/c start {url}")
{ CreateNoWindow = true });
или
ProcessStartInfo psi = new ProcessStartInfo
{
FileName = url,
UseShellExecute = true
};
Process.Start(psi);
но все равно не повезло, не могу открыть браузер по умолчанию. Сообщение об ошибке все еще The system cannot find the file specified.
Есть некоторые решения открывающие Internet Explorer, но они не подходят под мою спецификацию.
Как я могу открыть такой URL-адрес в любом браузере по умолчанию?
@ Daredevil Я думаю, он должен открыть мой браузер по умолчанию и показать страницу 404, если URL-адрес неверен?
Это может быть, но не могли бы вы опубликовать всю ошибку трассировки стека?
@ Daredevil Я добавил трассировку стека в свой пост.





Вы можете позволить классу Урибилдер сделать за вас работу расшифровка.
string urlEncoded = @"https://tw.news.yahoo.com/%E6%95%B8%E4%BD%8D%E8%BA%AB%E5%88%86%E8%AD%89%E6%93%AC9%E6%9C%88%E6%8F%90%E6%A8%A3%E5%BC%B5-%E5%BE%90%";
var builder = new UriBuilder(urlEncoded);
Process.Start(builder.ToString());
На самом деле это просто небольшая модификация исходной строки, добавление порта службы, но этого достаточно, чтобы строка стала распознаваемым URL-адресом.
Это не сработает, если вы попытаетесь декодировать его, используя класс Веб-утилита:
string urlDecoded = WebUtility.UrlDecode(urlEncoded);
Process.Start(urlDecoded); // Fail
В сообщении об ошибке говорится, что не удалось найти файл. Скорее всего, это связано с тем, что указан неверный путь.