6

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

谢谢

4

4 回答 4

7

您可以参考此文档了解如何检查 WebView2 Runtime 是否已安装。要进行验证,请完成以下操作之一:

  • 检查pv( REG_SZ) regkey 是否存在并且不为 null 或为空。REG_SZ在以下位置找到 pv ( ):

     HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}
    

    用于检查pvregkey 的 VB.NET 代码:

     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 中使用它。

于 2020-11-09T03:40:00.450 回答
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 应用程序,它还向您展示了上述代码的用法。

自助服务终端浏览器 (GitHub)

于 2020-12-04T18:35:56.413 回答
1

我想出了以下实现。(对不起,它是在 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;
}
于 2020-11-19T10:05:13.300 回答
0

“最佳答案”不再是正确答案。安装较新的 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。

于 2022-01-10T12:12:39.890 回答