检测客户端计算机上是否安装了 WebView2 (VB.NET)
Detect if WebView2 is installed on clients machine (VB.NET)
我正在寻找一种方法来检测客户端机器上是否安装了 WebView2 运行时,这样我就可以使用旧的 ie 浏览器来显示,如果他们没有安装的话。我正在使用 VB.NET.
谢谢
您可以参考this doc如何检查WebView2运行time是否已经安装。要验证,请完成以下操作之一:
检查 pv
(REG_SZ
) 注册表项是否存在并且不为空。在以下位置找到 pv (REG_SZ
):
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}
VB.NET 要检查的代码 pv
注册码:
Dim readValue = My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}", "pv", Nothing)
If readValue Is Nothing Then
'Key doesn't exist
Else
'Key existed, check value
End If
运行 GetAvailableCoreWebView2BrowserVersionString
并确保 versionInfo
是 NULL
.
它在文档中使用 C++。对于VB.NET,对应的方法是GetAvailableBrowserVersionString(String)
。你可以参考VB.NET.
中关于如何使用它的文档
我想出了以下实现。 (抱歉,它在 C# 中)
private bool WebViewIsInstalled()
{
string regKey = @"SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients";
using (RegistryKey edgeKey = Registry.LocalMachine.OpenSubKey(regKey))
{
if (edgeKey != null)
{
string[] productKeys = edgeKey.GetSubKeyNames();
if (productKeys.Any())
{
return true;
}
}
}
return false;
}
我已经用 C# 实现了一个工作代码示例。它使用方法 CoreWebView2Environment.GetAvailableBrowserVersionString()
来获取版本。
我已经使用 regkey 解决方案进行了测试,但它不适用于 Edge Chromium Beta、Dev 或 Canary。它仅在安装 WebView2 运行时时有效。
public static class WebView2Install
{
public static InstallInfo GetInfo()
{
var version = GetWebView2Version();
return new InstallInfo(version);
}
private static string GetWebView2Version()
{
try
{
return CoreWebView2Environment.GetAvailableBrowserVersionString();
}
catch (Exception) { return ""; }
}
}
public class InstallInfo
{
public InstallInfo(string version) => (Version) = (version);
public string Version { get; }
public InstallType InstallType => Version switch
{
var version when version.Contains("dev") => InstallType.EdgeChromiumDev,
var version when version.Contains("beta") => InstallType.EdgeChromiumBeta,
var version when version.Contains("canary") => InstallType.EdgeChromiumCanary,
var version when !string.IsNullOrEmpty(version) => InstallType.WebView2,
_ => InstallType.NotInstalled
};
}
public enum InstallType
{
WebView2, EdgeChromiumBeta, EdgeChromiumCanary, EdgeChromiumDev, NotInstalled
}
我也在GitHub上做了一个使用WebView2的WPF应用,上面的代码也给大家展示了用法
“最佳答案”不再是正确答案。
安装较新的 MS-Edge 版本(例如:97.0.1072.55)时,密钥
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}
没有创建,但是HKEY_CURRENT_USER下的另一个键被创建:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}
所以,检查 HKEY_LOCAL_MACHINE 下的密钥还不够,还应该检查 HKEY_CURRENT_USER。
我正在寻找一种方法来检测客户端机器上是否安装了 WebView2 运行时,这样我就可以使用旧的 ie 浏览器来显示,如果他们没有安装的话。我正在使用 VB.NET.
谢谢
您可以参考this doc如何检查WebView2运行time是否已经安装。要验证,请完成以下操作之一:
检查
pv
(REG_SZ
) 注册表项是否存在并且不为空。在以下位置找到 pv (REG_SZ
):HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}
VB.NET 要检查的代码
pv
注册码:Dim readValue = My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}", "pv", Nothing) If readValue Is Nothing Then 'Key doesn't exist Else 'Key existed, check value End If
运行
GetAvailableCoreWebView2BrowserVersionString
并确保versionInfo
是NULL
.它在文档中使用 C++。对于VB.NET,对应的方法是
中关于如何使用它的文档GetAvailableBrowserVersionString(String)
。你可以参考VB.NET.
我想出了以下实现。 (抱歉,它在 C# 中)
private bool WebViewIsInstalled()
{
string regKey = @"SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients";
using (RegistryKey edgeKey = Registry.LocalMachine.OpenSubKey(regKey))
{
if (edgeKey != null)
{
string[] productKeys = edgeKey.GetSubKeyNames();
if (productKeys.Any())
{
return true;
}
}
}
return false;
}
我已经用 C# 实现了一个工作代码示例。它使用方法 CoreWebView2Environment.GetAvailableBrowserVersionString()
来获取版本。
我已经使用 regkey 解决方案进行了测试,但它不适用于 Edge Chromium Beta、Dev 或 Canary。它仅在安装 WebView2 运行时时有效。
public static class WebView2Install
{
public static InstallInfo GetInfo()
{
var version = GetWebView2Version();
return new InstallInfo(version);
}
private static string GetWebView2Version()
{
try
{
return CoreWebView2Environment.GetAvailableBrowserVersionString();
}
catch (Exception) { return ""; }
}
}
public class InstallInfo
{
public InstallInfo(string version) => (Version) = (version);
public string Version { get; }
public InstallType InstallType => Version switch
{
var version when version.Contains("dev") => InstallType.EdgeChromiumDev,
var version when version.Contains("beta") => InstallType.EdgeChromiumBeta,
var version when version.Contains("canary") => InstallType.EdgeChromiumCanary,
var version when !string.IsNullOrEmpty(version) => InstallType.WebView2,
_ => InstallType.NotInstalled
};
}
public enum InstallType
{
WebView2, EdgeChromiumBeta, EdgeChromiumCanary, EdgeChromiumDev, NotInstalled
}
我也在GitHub上做了一个使用WebView2的WPF应用,上面的代码也给大家展示了用法
“最佳答案”不再是正确答案。 安装较新的 MS-Edge 版本(例如:97.0.1072.55)时,密钥
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}
没有创建,但是HKEY_CURRENT_USER下的另一个键被创建:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}
所以,检查 HKEY_LOCAL_MACHINE 下的密钥还不够,还应该检查 HKEY_CURRENT_USER。