问题描述
我正在寻找一种方法来检测客户端计算机上是否安装了WebView2运行时,以便我可以使用旧版本的浏览器(即未安装的浏览器)显示。我正在使用VB.NET。
谢谢
解决方法
您可以参阅this doc,了解如何检查WebView2 Runtime是否已安装。要进行验证,请完成以下操作之一:
-
检查
pv
(REG_SZ)注册表项是否存在并且不为null或为空。在以下位置找到pv(REG_SZ):HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}
VB.NET代码以检查
pv
regkey: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#中实现了一个工作代码示例。它使用方法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应用程序,它还向您展示了上述代码的用法。
,我想出了以下实现。 (很抱歉,它在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;
}