WebView2 用户原生 NetForms App 分发:真的需要 WebView2 Runtime 吗?

Distribution of WebView2 user native NetForms App: is WebView2 Runtime really needed?

由于 IE 生命周期结束,我将 WebBrowser(基于 IE)控件替换为 .net forms app (c#)Microsoft.Web.WebView2.WinForms.WebView2. distribution page表示,用户需要安装WebView2 Runtime,大约100MB!

我的问题是,这真的需要吗?安装 MS Edge 还不够吗(每 Windows 10 台机器上都有)?
This page 说:
先决条件:确保在继续之前安装以下先决条件列表。 WebView2 Runtime 或任何 Microsoft Edge Insider(预览版)频道(Beta、Dev 或 Canary)安装在受支持的 OS(目前 Windows 10,Windows 8.1,和 Windows 7).

但是我不确定Edge Insider是不是普通用户的Edge浏览器?

那么,我真的需要将 100MB WebView2 运行时(我们的一些客户是离线用户)与我的应用程序安装程序(它使用 WinForms.WebView2 控件在我的本机应用程序中显示 HTML 页面)一起分发吗? ,或者如果在这些系统上安装了 MS Edge 就足够了?

答案是:是的,您需要安装WebView2 Runtime!安装在用户机器上的 Edge 版本不是内部通道 - 它是稳定通道。

虽然您可以使用 Edge Insider 频道,但除了开发人员外,不建议使用此频道,因为只有开发人员才有此版本。

引用您链接到的页面:“WebView2 不支持 Microsoft Edge 稳定版”。

是的,您确实需要分发 WebView2 运行时。从the doc你link,你可以找到原因:

  1. 在本段开发或生产期间的运行时或浏览器支持下,您可以发现:

A production release of a WebView2 app can only use the WebView2 Runtime as the backing web platform, not Microsoft Edge.

  1. Windows10 上预装的浏览器是Edge Stable Channel,大多数人不会安装Edge Insider(预览)频道,以及:

Microsoft Edge Stable channel isn't supported for WebView2

是的,将 WebView2 运行时间包含在您的分发包中。

如果您在工具包中包含 WebView2 Evergreen Bootstrapper,它将获取最新的 evergreen 嵌入式浏览器。它旨在面向未来,即使您有一段时间不更新您的工具包。

当我包含 <2MiB 引导程序和 运行 它时,我的套件可以在 W10、W7SP1、W8.1、WS2016 和 WS2019 上正确安装。

而且,您的安装程序可以 detect whether WebView2 is already installed,并跳过重新安装。我希望每个编写安装程序的人都会这样做。如果我们这样做,那么我们的用户将免于重新安装每个使用 WebView2 的新应用程序。

这个小小的 Inno Setup 代码节为我正确地检测到了它。 Returns True 当需要 运行 WebView2 安装程序时。

function WebView2IsNotInstalled: Boolean;
  var Pv: String;
  var key64: String;
  var key32: String;
begin
    key64 := 'SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}';
    key32 := 'SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}'; 
    Result := True;
    if RegQueryStringValue(HKEY_LOCAL_MACHINE, key64, 'pv', Pv) then 
    begin
        Result := 0 = Length(pV);
    end
    else begin
       if RegQueryStringValue(HKEY_LOCAL_MACHINE, key32, 'pv', Pv)  then
       begin
          Result := 0 = Length(pV);
       end;
    end; 
end;

(请仔细检查此代码:我不是安装高手。)