Как я могу получить кнопку в своем настольном приложении, которая заставляет браузер пользователя по умолчанию запускать и отображать URL-адрес, предоставленный логикой приложения.
Как запустить URL-адрес в браузере пользователей по умолчанию из моего приложения?
Ответ 1
Process.Start("http://www.google.com");
Ответ 2
Process.Start([ваш url]) действительно является ответом, во всех, кроме чрезвычайно узких случаях. Однако для полноты я упомянул, что некоторое время назад мы столкнулись с таким вопросом: если вы пытаетесь открыть URL-адрес "file: \" (в нашем случае, чтобы показать локальную установленную копию нашего webhelp) при запуске из оболочки параметры к URL-адресу были выброшены.
Наше довольно хакерское решение, которое я не рекомендую, если вы не столкнулись с проблемой "правильного" решения, выглядели примерно так:
В обработчике кликов для кнопки:
string browserPath = GetBrowserPath();
if (browserPath == string.Empty)
browserPath = "iexplore";
Process process = new Process();
process.StartInfo = new ProcessStartInfo(browserPath);
process.StartInfo.Arguments = "\"" + [whatever url you're trying to open] + "\"";
process.Start();
Уродливая функция, которую вы не должны использовать, если Process.Start([ваш url]) не выполняет то, что вы ожидаете от нее:
private static string GetBrowserPath()
{
string browser = string.Empty;
RegistryKey key = null;
try
{
// try location of default browser path in XP
key = Registry.ClassesRoot.OpenSubKey(@"HTTP\shell\open\command", false);
// try location of default browser path in Vista
if (key == null)
{
key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http", false); ;
}
if (key != null)
{
//trim off quotes
browser = key.GetValue(null).ToString().ToLower().Replace("\"", "");
if (!browser.EndsWith("exe"))
{
//get rid of everything after the ".exe"
browser = browser.Substring(0, browser.LastIndexOf(".exe") + 4);
}
key.Close();
}
}
catch
{
return string.Empty;
}
return browser;
}