检测客户端机器上是不是安装了 WebView2 (VB.NET)

Posted

技术标签:

【中文标题】检测客户端机器上是不是安装了 WebView2 (VB.NET)【英文标题】:Detect if WebView2 is installed on clients machine (VB.NET)检测客户端机器上是否安装了 WebView2 (VB.NET) 【发布时间】:2021-02-20 16:54:36 【问题描述】:

我正在寻找一种方法来检测客户端计算机上是否安装了 WebView2 运行时,以便如果他们没有安装它,我可以使用旧的 ie 浏览器进行显示。我正在使用 VB.NET。

谢谢

【问题讨论】:

【参考方案1】:

你可以参考this doc查看如何检查WebView2 Runtime是否已经安装。要进行验证,请完成以下操作之一:

检查pv (REG_SZ) regkey 是否存在并且不为空或为空。在以下位置找到 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 并确保versionInfoNULL

它在文档中使用 C++。对于 VB.NET,对应的方法是GetAvailableBrowserVersionString(String)。 VB.NET的使用方法可以参考文档。

【讨论】:

非常感谢,第一部分工作完美,虽然我无法让第二部分工作。不确定这是否是必需的,因为第一位有效。 不客气。您只需要使用其中一个部件。【参考方案2】:

我想出了以下实现。 (对不起,它是在 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;

【讨论】:

【参考方案3】:

我已经用 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应用,也给大家展示了上面代码的用法。

KioskBrowser (GitHub)

【讨论】:

以上是关于检测客户端机器上是不是安装了 WebView2 (VB.NET)的主要内容,如果未能解决你的问题,请参考以下文章

如何检测 webview2 中的鼠标点击(c#/vb.net)

如何在 WebView2 上启用扩展

WebView2 控件不在工具箱中

如何在Visual Studio工具栏中添加WebView2控件?

如何在WebView2上启用扩展名

如何检测机器是不是空闲,15 秒内没有来自服务器的值?