我想让我的WPF应用程序打开默认浏览器并转到某个网页。我怎么做?
我想让我的WPF应用程序打开默认浏览器并转到某个网页。我怎么做?
Answers:
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在有关如何使用Visual C#以编程方式启动默认Internet浏览器的KB305703文章中对此进行了解释。
不要忘记查看“故障排除”部分。
您无法从提升权限的应用程序启动网页。这将引发0x800004005异常,这可能是因为explorer.exe和浏览器未在高架上运行。
要在非提升的Web浏览器中从提升的应用程序启动网页,请使用 Mike Feng编写的代码。我试图将URL传递给lpApplicationName,但这没有用。当我将CreateProcessWithTokenW与lpApplicationName =“ explorer.exe”(或iexplore.exe)和lpCommandLine = url一起使用时,也不会。
可以使用以下变通办法:创建一个具有一个任务的小型EXE项目:Process.Start(url),使用CreateProcessWithTokenW运行此.EXE。在我的Windows 8 RC上,它可以正常工作,并在Google Chrome中打开网页。
这是我完整的代码如何打开。
有2个选项:
使用默认浏览器打开(行为类似于在浏览器窗口中打开)
通过默认命令选项打开(行为就像您使用“ RUN.EXE”命令一样)
通过“资源管理器”打开(行为就像您在文件夹窗口URL中写了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
?
由于今天我遇到类似的问题,因此我有解决方案。
假设您想通过运行具有管理员权限的应用打开http://google.com:
ProcessStartInfo startInfo = new ProcessStartInfo("iexplore.exe", "http://www.google.com/");
Process.Start(startInfo);