Я хочу, чтобы мое приложение WPF открыло браузер по умолчанию и перешел на определенную веб-страницу. Как это сделать?
Как открыть веб-страницу из моего приложения?
Ответ 1
System.Diagnostics.Process.Start("http://www.webpage.com");
Один из многих способов.
Ответ 2
Я использую эту строку для запуска браузера по умолчанию:
System.Diagnostics.Process.Start("http://www.google.com"); 
		Ответ 3
В то время как был предоставлен хороший ответ (с использованием Process.Start), безопаснее инкапсулировать его в функцию, которая проверяет, что переданная строка действительно является URI, чтобы избежать случайного запуска случайных процессов на машине.
public static bool IsValidUri(string uri)
{
    if (!Uri.IsWellFormedUriString(uri, UriKind.Absolute))
        return false;
    Uri tmp;
    if (!Uri.TryCreate(uri, UriKind.Absolute, out tmp))
        return false;
    return tmp.Scheme == Uri.UriSchemeHttp || tmp.Scheme == Uri.UriSchemeHttps;
}
public static bool OpenUri(string uri) 
{
    if (!IsValidUri(uri))
        return false;
     System.Diagnostics.Process.Start(uri);
     return true;
}
		Ответ 4
Microsoft объясняет это в статье KB305703 Как запустить программный браузер по умолчанию с помощью Visual С#.
Не забудьте проверить раздел "Поиск и устранение неисправностей".
Ответ 5
Вы не можете запустить веб-страницу из приложения с повышенными правами. Это вызовет исключение 0x800004005, возможно, потому что explorer.exe и браузер работают без повышенных прав.
Чтобы запустить веб-страницу из приложения с повышенными правами в веб-браузере без повышенных прав, используйте код , созданный Майком Фенгом. Я пытался передать URL-адрес lpApplicationName, но это не сработало. Также не при использовании CreateProcessWithTokenW с lpApplicationName = "explorer.exe" (или iexplore.exe) и lpCommandLine = url.
Следующий обходной путь работает: создайте небольшой EXE-проект, в котором есть одна задача: Process.Start(url), используйте CreateProcessWithTokenW для запуска этого .EXE. На моем Windows 8 RC это работает нормально и открывает веб-страницу в Google Chrome.
Ответ 6
Вот мой полный код, как открыть.
есть 2 варианта:
-  
открыть с использованием браузера по умолчанию (поведение похоже на открытое в окне браузера)
 -  
открыть по умолчанию параметры команды (поведение похоже на команду "RUN.EXE" )
 -  
открыть через 'explorer' (поведение похоже на то, что вы написали url внутри URL-адреса окна папки)
 
[необязательное предложение] 4. используйте расположение процесса iexplore, чтобы открыть требуемый URL
CODE:
internal static bool TryOpenUrl(string p_url)
    {
        // try use default browser [registry: HKEY_CURRENT_USER\Software\Classes\http\shell\open\command]
        try
        {
            string keyValue = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Software\Classes\http\shell\open\command", "", null) as string;
            if (string.IsNullOrEmpty(keyValue) == false)
            {
                string browserPath = keyValue.Replace("%1", p_url);
                System.Diagnostics.Process.Start(browserPath);
                return true;
            }
        }
        catch { }
        // try open browser as default command
        try
        {
            System.Diagnostics.Process.Start(p_url); //browserPath, argUrl);
            return true;
        }
        catch { }
        // try open through 'explorer.exe'
        try
        {
            string browserPath = GetWindowsPath("explorer.exe");
            string argUrl = "\"" + p_url + "\"";
            System.Diagnostics.Process.Start(browserPath, argUrl);
            return true;
        }
        catch { }
        // return false, all failed
        return false;
    }
и функция помощника:
internal static string GetWindowsPath(string p_fileName)
    {
        string path = null;
        string sysdir;
        for (int i = 0; i < 3; i++)
        {
            try
            {
                if (i == 0)
                {
                    path = Environment.GetEnvironmentVariable("SystemRoot");
                }
                else if (i == 1)
                {
                    path = Environment.GetEnvironmentVariable("windir");
                }
                else if (i == 2)
                {
                    sysdir = Environment.GetFolderPath(Environment.SpecialFolder.System);
                    path = System.IO.Directory.GetParent(sysdir).FullName;
                }
                if (path != null)
                {
                    path = System.IO.Path.Combine(path, p_fileName);
                    if (System.IO.File.Exists(path) == true)
                    {
                        return path;
                    }
                }
            }
            catch { }
        }
        // not found
        return null;
    }
Надеюсь, я помог.
Ответ 7
Я отлично тестировал его.
Я использую эту строку для запуска браузера по умолчанию:
System.Diagnostics.Process.Start("http://www.google.com");
		Ответ 8
У меня есть решение для этого из-за того, что у меня есть аналогичная проблема сегодня.
Предположим, что вы хотите открыть http://google.com из приложения, использующего admin priviliges:
ProcessStartInfo startInfo = new ProcessStartInfo("iexplore.exe", "http://www.google.com/");
Process.Start(startInfo); 
		Ответ 9
Старый школьный путь;)
public static void openit(string x) {
   System.Diagnostics.Process.Start("cmd", "/C start" + " " + x); 
}
Использование: openit("www.google.com");
Ответ 10
Принятый ответ больше не работает в .NET Core 3. Чтобы заставить это работать, используйте следующий метод:
var psi = new ProcessStartInfo
{
    FileName = url,
    UseShellExecute = true
};
Process.Start (psi);
		Ответ 11
Я думаю, что это наиболее используемый:
System.Diagnostics.Process.Start("http://www.google.com");