.NET混合開發解決方案5 WebView2運行時與分發應用
- 2022 年 4 月 29 日
- 筆記
- .NET:WebView2, WebView2
發布使用Microsoft Edge WebView2的應用程式時,客戶端電腦上需要安裝WebView2運行時,可以安裝自動更新的Evergreen運行時,也可以安裝固定版本的。
WebView2 運行時是可再發行運行時,充當 WebView2 應用的基礎 (或 支援) Web 平台。 此概念類似於 Visual C++ 或適用於 C++/.NET 應用的 .NET 運行時。 WebView2 運行時包含已修改的Microsoft Edge二進位文件,這些二進位文件針對 WebView2 應用進行了微調和測試。 安裝 WebView2 運行時後,它不會顯示為用戶可見的瀏覽器應用。 例如,用戶在 「開始」 菜單中沒有瀏覽器桌面快捷方式或條目。
可通過兩種不同的方式將 WebView2 運行時分發和更新到客戶端電腦:常青分發模式和固定版本分發模式。
下載地址://developer.microsoft.com/zh-CN/microsoft-edge/webview2/#download-section
在長青分發模式下,WebView2運行時不隨應用打包,而是最初使用在線引導程式或離線安裝程式安裝到客戶端。之後,WebView2運行時會在客戶端機器上自動更新。然後,開發者可以從最新的 WebView2 SDK 分發使用最新 WebView2 API 的 WebView2 應用的更新。對於大多數開發人員,建議使用長青分發模式。
- 優點
- 底層web平台(WebView2運行時)會自動更新,無需您付出更多努力。
- 客戶端系統上的WebView2運行時需要更少的磁碟空間,因為客戶端上的所有WebView2應用程式都共享WebView2運行時。
- 在符合條件的系統上,Microsoft Edge和Evergreen WebView2運行時的二進位文件在同一版本上時會硬鏈接在一起。這種鏈接為磁碟佔用、記憶體和性能提供了好處。
- 缺點
- WebView2應用程式無法指定需要特定版本的WebView2運行時。
在固定版本分發模式下,下載特定版本的 WebView2 運行時,並將其與應用包中的 WebView2 應用一起打包。 隨應用打包的 WebView2 運行時僅由 WebView2 應用使用,而不由客戶端電腦上的任何其他應用使用。
- 優點
- 可以更好地控制WebView2運行時的版本控制。清晰地知道應用程式可以使用哪些WebView2 API,因為開發者可以控制應用程式可以使用哪個版本的WebView2運行時。
- 開發者應用程式不需要測試WebView2是否有最新的API。
- 缺點
- 需要自行管理 WebView2 運行時。 WebView2 運行時不會在客戶端上自動更新,因此若要使用最新的 WebView2 API,必須定期將應用與更新的 WebView2 運行時一起更新。
- 如果安裝了多個 WebView2 應用,則客戶端需要更多磁碟空間。
- 無法使用安裝程式安裝固定版本運行時。
上圖中提供的三種下載方式,全部下載到本地,如下圖
①是在客戶端電腦上運行的小型常青運行時引導程式,體積僅有1.7M,安裝過程中需要聯網下載WebView2 真正的運行時程式,下載完成後才執行安裝。採用這種模式安裝的運行時始終與微軟官方的最新版本保持一致。
②是32位的WebView2 Runtime長青版獨立安裝程式。
③是64位的WebView2 Runtime長青版獨立安裝程式。
④是固定版本運行時。截止我下載時最新版本為100.0.1185.50。開發者可以選擇其他版本使用。下載後解壓,將其打包到應用程式中即可使用。
對於大多數應用,建議使用常青分發模式。安裝完成後,控制面板查看,版本號與Edge瀏覽器版本保持一致。但是WebView2運行時是獨立的運行環境,不依賴於Edge。
WebView2 的正式發布版 (GA) 或預覽版適用於以下編程環境:
- 採用長青版安裝程式安裝WebView2運行時程式,之後通過通過 Windows Server Update Services (WSUS) 為 WebView2 運行時提供更新服務。建議使用默認更新程式接收 WebView2 Microsoft Edge更新。 應謹慎修改更新和服務路徑。
在開發和測試期間,WebView2應用程式可以使用以下任一選項作為支援web平台:
- WebView2運行時通常提供與Microsoft Edge瀏覽器穩定通道相同的web平台功能和更新節奏。在生產環境中使用WebView2運行時,或者根據用戶現在擁有的web平台進行開發和測試。
- 預覽 (預覽體驗成員) Microsoft Edge瀏覽器頻道。 這些Microsoft Edge預覽頻道是 Beta、Dev 和 Canary。 使用此方法測試應用是否具有前向兼容性,以便知道是否即將發生需要更新應用的重大更改。 請參閱 測試即將推出的 API 和功能。
WebView2應用程式的生產版本只能使用WebView2運行時作為支援web平台,而不能使用Microsoft Edge。
常青分發模式可確保 WebView2 應用正在利用最新的 WebView2 功能和安全更新。 常青分布模式具有以下特徵:
-
WebView2 運行時會自動更新,而無需執行任何操作。 它接收Microsoft Edge穩定頻道和Microsoft Edge安全更新發行說明中所述的相同Microsoft Edge更新。
-
所有使用常青分發模式的 WebView2 應用都使用常青 WebView2 運行時的共享副本,從而節省磁碟空間。
-
在符合條件的系統上,Microsoft Edge和 Evergreen WebView2 運行時的二進位文件在同一版本中硬鏈接在一起。 此鏈接為磁碟佔用量、記憶體和性能提供了好處。
使用 WebView2 運行時的長青分發模式時,WebView2 應用假定客戶端具有最新的運行時。 對於客戶端上的所有應用,應用不能要求特定版本的 WebView2 運行時。 發布新的 WebView2 SDK 包時,WebView2 運行時的兼容版本已分發給客戶端。 因此,WebView2 應用可以使用最新版本的 WebView2 SDK 中的 API。請參閱 了解瀏覽器版本和 WebView2。
對於具有嚴格兼容性要求的受約束環境,請考慮使用固定版本分發模式。 固定版本分發模式以前稱為自帶版本分發模式。
在固定版本分發模式下,開發者可以控制應用程式WebView2運行時的更新時間。下載特定版本的WebView2運行時,然後將其與WebView2應用程式打包。客戶端上的WebView2運行時不會自動更新。相反,開發者可以定期更新WebView2運行時,該運行時與更新的應用程式一起打包和分發。固定版本方法不使用WebView2運行時的註冊表項。
若要使用固定版本分發模式,請執行以下操作:
1、下載 WebView2 運行時的固定版本作為包。
可在此站點下載最新版本和第二大版本的最修補版本。 保留所需任何版本的存檔副本。
2、將下載的文件進行解壓縮
3、在應用包中包括所有解壓縮的固定版本二進位文件,約368M,這些二進位文件將在應用安裝期間部署在目標電腦上。
4、在創建WebView2環境時指示固定版本二進位文件的路徑。
-
對於 Win32 C/C++,可以使用 CreateCoreWebView2EnvironmentWithOptions 函數創建環境。
browserExecutableFolder
使用該參數指示包含msedgewebview2.exe
的文件夾的路徑。 -
對於 .NET,必須在 WebView2
Source
屬性生效之前指定環境。對於 WinUI,請通過指定已安裝的位置並為運行時路徑設置環境變數來確保應用有權訪問該文件夾。 執行此操作的一種方法是將以下 C# 程式碼添加到應用
-
對於 .NET,可以使用以下任一方法來指定環境:在
CreationProperties
元素上WebView2
設置 (WPFWinForms/) 屬性。BrowserExecutableFolder
使用 (WPFWinForms /) 類中CoreWebView2CreationProperties
的成員來指示固定版本二進位文件的路徑。 -
或者使用
EnsureCoreWebView2Async
(WPFWinForms /) 來指定環境。browserExecutableFolder
使用 CoreWebView2Environment.CreateAsync 中的參數來指示固定版本二進位文件的路徑。
-
StorageFolder localFolder = Windows.ApplicationModel.Package.Current.InstalledLocation; String fixedPath = Path.Combine(localFolder.Path, "FixedRuntime\\(version number)"); Debug.WriteLine($"Launch path [{localFolder.Path}]"); Debug.WriteLine($"FixedRuntime path [{fixedPath}]"); Environment.SetEnvironmentVariable("WEBVIEW2_BROWSER_EXECUTABLE_FOLDER", fixedPath);
5、使用應用打包並寄送固定版本二進位文件。 根據需要更新二進位文件。
- 對於 WinUI,這可能包括在程式碼編輯器中打開項目文件 (
.csproj
) ,然後在項目標記中添加以下程式碼
<ItemGroup> <Content Include="FixedRuntime\(version number)\\**\*.*"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> </ItemGroup>
bin\**designated architecture**\Release
驗證文件夾是否具有匹配的 FixedRuntime\ (版本號) 文件夾,其中包含運行時文件。
WebView2應用程式不允許使用Microsoft Edge的穩定頻道作為支援web平台。此限制可防止WebView2應用程式的生產版本依賴於瀏覽器。WebView2應用程式在生產過程中不能依賴瀏覽器,原因如下:
-
Microsoft Edge不能保證存在於所有用戶設備上。 企業和教育部門的許多設備都與Windows Update斷開連接,或者不受 Microsoft 直接管理。 此類設備可能未安裝Microsoft Edge。 要求 WebView2 應用的生產版本使用 WebView2 運行時而不是Microsoft Edge避免使Microsoft Edge成為運行 WebView2 應用的先決條件。
-
瀏覽器和應用有不同的用例。 如果 WebView2 應用需要客戶端上存在Microsoft Edge,則可能會對 WebView2 應用產生意外的副作用。 例如,IT 管理員可以阻止從特定版本更新瀏覽器,以使瀏覽器與內部網站兼容。 要求 WebView2 應用的生產版本使用 WebView2 運行時而不是瀏覽器,即使客戶端管理員阻止了瀏覽器更新,WebView2 應用也可保持常青。
-
與瀏覽器不同,WebView2 運行時是針對應用方案開發和測試的,在某些情況下,WebView2 運行時可能包含瀏覽器中尚不可用的 bug 修復。
長青版 WebView2 運行時將作為Windows 11作業系統的一部分包含在內。
在Windows 11之前,各種 WebView2 應用已在具有作業系統的設備上安裝了長青版運行時。 但是,某些設備可能未預安裝運行時,因此最好檢查客戶端上是否存在運行時。
在應用創建 WebView2 之前,應用應通過檢查註冊表項或調用 API 來檢查 WebView2 運行時是否存在,並在缺少運行時時安裝它。 在安裝或更新應用 (建議的) 或應用運行時,應用可以執行此檢查。