Я хочу змусити свою програму WPF відкрити браузер за замовчуванням і перейти на певну веб-сторінку. Як це зробити?
Я хочу змусити свою програму WPF відкрити браузер за замовчуванням і перейти на певну веб-сторінку. Як це зробити?
Відповіді:
System.Diagnostics.Process.Start("http://www.webpage.com");
Один із багатьох способів.
Прийнята відповідь більше не працює в .NET Core 3 . Щоб він працював, використовуйте наступний метод:
var psi = new ProcessStartInfo
{
FileName = url,
UseShellExecute = true
};
Process.Start (psi);
Хоча хороша відповідь була дана (використовуючи 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;
}
Microsoft пояснює це в статті KB305703 про те, як програмно запустити Інтернет-браузер за замовчуванням за допомогою програми Visual C # .
Не забудьте перевірити розділ Виправлення неполадок.
Ви не можете запустити веб-сторінку із підвищеної програми. Це призведе до винятку 0x800004005, ймовірно, тому, що explorer.exe і браузер працюють без підвищеного рівня.
Щоб запустити веб-сторінку з підвищеної програми в непідвищеному веб-браузері, використовуйте код, зроблений Майком Фенгом . Я намагався передати URL-адресу lpApplicationName, але це не вийшло. Також не, коли я використовую CreateProcessWithTokenW з lpApplicationName = "explorer.exe" (або iexplore.exe) та lpCommandLine = URL.
Наступне вирішення справ працює: Створіть невеликий EXE-проект, який має одне завдання: Process.Start (URL), використовуйте CreateProcessWithTokenW для запуску цього .EXE. У моєму Windows 8 RC це працює чудово і відкриває веб-сторінку в Google Chrome.
Ось мій повний код, як відкрити.
Є 2 варіанти:
відкрити за допомогою браузера за замовчуванням (поведінка подібно до відкритого у вікні браузера)
відкрити через параметри команд за замовчуванням (поведінка подібно до використання команди "RUN.EXE")
відкрити через "Explorer" (поведінка така, як ви написали URL-адресу всередині вікна вашої папки)
[необов'язкова пропозиція] 4. використовуйте iexplore місце розташування, щоб відкрити потрібну URL-адресу
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;
}
Сподіваюся, я допоміг.
GetWindowsPath
?
Старий шкільний шлях;)
public static void openit(string x) {
System.Diagnostics.Process.Start("cmd", "/C start" + " " + x);
}
Використання: openit("www.google.com");
У мене є рішення для цього через те, що у мене є подібна проблема сьогодні.
Припустимо, ви хочете відкрити http://google.com із програми, що працює з адміністратором привілеїв:
ProcessStartInfo startInfo = new ProcessStartInfo("iexplore.exe", "http://www.google.com/");
Process.Start(startInfo);