Created
November 9, 2023 22:07
-
-
Save RickStrahl/bd112952d4e83806aac9bc3d97191492 to your computer and use it in GitHub Desktop.
Interactive UI version of whether WebView is installed and then launching installer with Admin Rights
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// <summary> | |
/// Helper function that checks to see if the WebView control is installed | |
/// and if not prompts to install it. | |
/// | |
/// Should be called during app startup to ensure the WebView Runtime is available. | |
/// </summary> | |
/// <param name="showDownloadUi"></param> | |
/// <returns></returns> | |
public static bool IsWebViewVersionInstalledUi(bool showDownloadUi = false) | |
{ | |
string versionNo = null; | |
Version asmVersion = null; | |
Version ver = null; | |
try | |
{ | |
// If version no lookup or parsing fails WebView is not available | |
versionNo = CoreWebView2Environment.GetAvailableBrowserVersionString(); | |
// strip off 'canary' or 'stable' version | |
versionNo = versionNo.ExtractString("", " ", allowMissingEndDelimiter: true)?.Trim(); | |
ver = new Version(versionNo); | |
// DEBUG: Force a version mismatch | |
// ver = new Version(112, 0, 1600, 1); | |
if (!mmApp.Configuration.System.IgnoreWebViewVersionMismatch) | |
{ | |
asmVersion = typeof(CoreWebView2Environment).Assembly.GetName().Version; | |
if (ver.Build >= asmVersion.Build) | |
return true; | |
} | |
else | |
{ | |
return true; | |
} | |
} | |
catch(Exception ex) | |
{ | |
mmApp.Log($"WebView Version lookup failed. {versionNo} {asmVersion}", ex.GetBaseException(), logLevel: LogLevels.Error); | |
} | |
if (!showDownloadUi) | |
return false; | |
var result = MessageBoxResult.None; | |
string title; | |
string msg; | |
if (string.IsNullOrEmpty(versionNo)) | |
{ | |
title = "WebView Runtime is not installed"; | |
msg = @"The WebView Runtime is not installed. | |
In order to use Markdown Monster you need to install the latest Microsoft WebView runtime. | |
We'll shut down after you made a selection. Please restart Markdown Monster when done. | |
Do you want to install the Edge WebView Runtime now?"; | |
} | |
else | |
{ | |
title = "WebView Runtime is out of Date"; | |
msg = $@"The WebView Runtime is older than the WebView component: | |
Installed Runtime Build: {ver.Build} | |
Required Runtime Build: {asmVersion.Build} | |
Do you want to want to update your installation now or continue with the outdated version? | |
Note: you can override this behavior by setting this configuration value to `true`: | |
System.IgnoreWebViewVersionMismatch=true | |
"; | |
} | |
Task.Run(() => | |
{ | |
result = MessageBox.Show( | |
msg, title, MessageBoxButton.YesNo, MessageBoxImage.Information); | |
}); | |
while (result == MessageBoxResult.None) | |
{ | |
Thread.Sleep(100); | |
} | |
if (result == MessageBoxResult.Yes) | |
{ | |
string path = System.IO.Path.Combine(App.InitialStartDirectory, | |
"BinSupport\\MicrosoftEdgeWebview2Setup.exe"); | |
try | |
{ | |
ShellUtils.ExecuteCommandLine("\"" + path +"\"", verb: "RunAs"); | |
Dispatcher.CurrentDispatcher.Delay(3000, () => Environment.Exit(0)); | |
} | |
catch(Exception ex) | |
{ | |
mmApp.Log("Failed to run WebViewRuntime Installer: " + path, ex, logLevel: LogLevels.Error); | |
ShellUtils.OpenUrl(mmApp.Urls.WebViewInstallerUrl); | |
} | |
return false; | |
} | |
return true; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment