Пример #1
0
        public (FrameworkElement, Size, string) GetViewer(FileInfo fileInfo)
        {
            var requestSize = new Size
            {
                Width  = 1200,
                Height = 900
            };

            try
            {
                CoreWebView2Environment.GetAvailableBrowserVersionString();

                var webView2 = new WebView2
                {
                    Source = new Uri(fileInfo.FullName, UriKind.Absolute)
                };

                return(webView2, requestSize, WinExplorerHelper.GetSizeFormat(fileInfo.Length));
            }
            catch (WebView2RuntimeNotFoundException)
            {
                var webBrowser = new WebBrowser
                {
                    Source = new Uri(fileInfo.FullName, UriKind.Absolute)
                };

                return(webBrowser, requestSize, WinExplorerHelper.GetSizeFormat(fileInfo.Length));
            }
        }
Пример #2
0
        private void DiscordForm_Load(object sender, EventArgs e)
        {
            try
            {
                CoreWebView2Environment.GetAvailableBrowserVersionString((string)null);
                webView2.add_NavigationCompleted((EventHandler <CoreWebView2NavigationCompletedEventArgs>)WebView2_NavigationCompleted);
                webView2.EnsureCoreWebView2Async((CoreWebView2Environment)null);
                webView2.add_CoreWebView2InitializationCompleted((EventHandler <CoreWebView2InitializationCompletedEventArgs>)WebView2_CoreWebView2InitializationCompleted);
            }
            catch
            {
                switch (MessageBox.Show("You don't have EdgeWebView installed! Do you want to download it?", OnProgramStart.Name, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation))
                {
                case DialogResult.Yes:
                    new WebClient().DownloadFile("https://go.microsoft.com/fwlink/p/?LinkId=2124703", Path.Combine(Path.GetTempPath(), "MicrosoftEdgeWebview2Setup.exe"));
                    Process.Start(Path.Combine(Path.GetTempPath(), "MicrosoftEdgeWebview2Setup.exe"));
                    Environment.Exit(1);
                    break;

                case DialogResult.No:
                    Close();
                    break;
                }
            }
        }
Пример #3
0
 // Token: 0x06000011 RID: 17 RVA: 0x000021A0 File Offset: 0x000003A0
 private void DiscordForm_Load(object sender, EventArgs e)
 {
     try
     {
         CoreWebView2Environment.GetAvailableBrowserVersionString(null);
         this.webView2.NavigationCompleted += this.WebView2_NavigationCompleted;
         this.webView2.EnsureCoreWebView2Async(null);
         this.webView2.CoreWebView2InitializationCompleted += this.WebView2_CoreWebView2InitializationCompleted;
     }
     catch
     {
         DialogResult dialogResult = MessageBox.Show("You don't have EdgeWebView installed! Do you want to download it?", OnProgramStart.Name, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);
         if (dialogResult != DialogResult.Yes)
         {
             if (dialogResult == DialogResult.No)
             {
                 base.Close();
             }
         }
         else
         {
             new WebClient().DownloadFile("https://go.microsoft.com/fwlink/p/?LinkId=2124703", Path.Combine(Path.GetTempPath(), "MicrosoftEdgeWebview2Setup.exe"));
             Process.Start(Path.Combine(Path.GetTempPath(), "MicrosoftEdgeWebview2Setup.exe"));
             Environment.Exit(1);
         }
     }
 }
Пример #4
0
        public void SetVirtualHostName(string virtualHostName, string folderName)
        {
            string version = CoreWebView2Environment.GetAvailableBrowserVersionString();

            this.CheckIfInitialized();
            this.ctx?.Post(_ => this.wv2 !.SetVirtualHostNameToFolderMapping(virtualHostName, folderName, CoreWebView2HostResourceAccessKind.Allow), null);
        }
Пример #5
0
 public static bool IsWebView2Available()
 {
     try
     {
         return(!string.IsNullOrEmpty(CoreWebView2Environment.GetAvailableBrowserVersionString()));
     }
     catch (Exception) { return(false); }
 }
Пример #6
0
 private static string GetWebView2Version()
 {
     try
     {
         return(CoreWebView2Environment.GetAvailableBrowserVersionString());
     }
     catch (Exception) { return(""); }
 }
Пример #7
0
 private static bool IsEdgiumAvailable()
 {
     try
     {
         string edgeVersion = CoreWebView2Environment.GetAvailableBrowserVersionString();
         return(!string.IsNullOrEmpty(edgeVersion));
     }
     catch { return(false); }
 }
Пример #8
0
 public static bool IsWebViewSupported()
 {
     try
     {
         return(!string.IsNullOrEmpty(CoreWebView2Environment.GetAvailableBrowserVersionString()));
     }
     catch (WebView2RuntimeNotFoundException)
     {
         return(false);
     }
 }
Пример #9
0
 public static bool IsWebView2Available()
 {
     try
     {
         return(!string.IsNullOrEmpty(CoreWebView2Environment.GetAvailableBrowserVersionString(Path.Combine(App.LocalDataPath, @"Microsoft.WebView2.FixedVersionRuntime\\"))));
     }
     catch (Exception)
     {
         return(false);
     }
 }
Пример #10
0
 private bool IsWebView2Available()
 {
     try
     {
         string wv2Version = CoreWebView2Environment.GetAvailableBrowserVersionString();
         return(!string.IsNullOrEmpty(wv2Version));
     }
     catch (WebView2RuntimeNotFoundException)
     {
         return(false);
     }
 }
Пример #11
0
 private static bool IsWebView2RuntimeInstalled()
 {
     try
     {
         CoreWebView2Environment.GetAvailableBrowserVersionString();
         return(true);
     }
     catch (WebView2RuntimeNotFoundException e)
     {
         e.ReportException();
         return(false);
     }
 }
Пример #12
0
        private bool IsRuntimeInstalled()
        {
            try
            {
                CoreWebView2Environment.GetAvailableBrowserVersionString();

                return(true);
            }
            catch
            {
                return(false);
            }
        }
Пример #13
0
        /// <summary>
        /// Detects whether WebView2 is installed
        /// </summary>
        /// <returns>true if installed, false if not installed</returns>
        public static bool Detect()
        {
#if TEST_INSTALL
            return(false);
#endif
            try
            {
                var versionInfo = CoreWebView2Environment.GetAvailableBrowserVersionString();
                return(versionInfo != null);
            }
            catch (WebView2RuntimeNotFoundException)
            {
                return(false);
            }
        }
Пример #14
0
        public static string GetAvailableBrowserVersionString()
        {
            if (BrowserVersion == null)
            {
                try
                {
                    BrowserVersion = CoreWebView2Environment.GetAvailableBrowserVersionString();
                }
                catch (Exception)
                {
                    BrowserVersion = String.Empty;
                }
            }

            return(BrowserVersion);
        }
 private bool IsWebView2Available()
 {
     try
     {
         string wv2Version = CoreWebView2Environment.GetAvailableBrowserVersionString();
         return(!string.IsNullOrEmpty(wv2Version));
     }
     catch (WebView2RuntimeNotFoundException)
     {
         return(false);
     }
     catch (Exception ex) when(ex is BadImageFormatException || ex is DllNotFoundException)
     {
         throw new MsalClientException(MsalError.WebView2LoaderNotFound, MsalErrorMessage.WebView2LoaderNotFound, ex);
     }
 }
Пример #16
0
 private void InitializeBrowserControl()
 {
     if (string.IsNullOrEmpty(_args.ChangelogURL))
     {
         var reduceHeight = labelReleaseNotes.Height + webBrowser.Height;
         labelReleaseNotes.Hide();
         webBrowser.Hide();
         webView2.Hide();
         Height -= reduceHeight;
     }
     else
     {
         bool webView2RuntimeFound = false;
         try
         {
             string availableBrowserVersion   = CoreWebView2Environment.GetAvailableBrowserVersionString();
             string requiredMinBrowserVersion = "86.0.616.0";
             if (!string.IsNullOrEmpty(availableBrowserVersion) &&
                 CoreWebView2Environment.CompareBrowserVersions(availableBrowserVersion, requiredMinBrowserVersion) >= 0)
             {
                 webView2RuntimeFound = true;
             }
         }
         catch (WebView2RuntimeNotFoundException)
         {
             // ignored
         }
         if (webView2RuntimeFound)
         {
             webBrowser.Hide();
             webView2.CoreWebView2InitializationCompleted += WebView_CoreWebView2InitializationCompleted;
             webView2.EnsureCoreWebView2Async();
         }
         else
         {
             if (null != AutoUpdater.BasicAuthChangeLog)
             {
                 webBrowser.Navigate(_args.ChangelogURL, "", null,
                                     $"Authorization: {AutoUpdater.BasicAuthChangeLog}");
             }
             else
             {
                 webBrowser.Navigate(_args.ChangelogURL);
             }
         }
     }
 }
Пример #17
0
        public static bool CanUseWebView2()
        {
            bool canUseWebView2 = SystemInformation.Instance.DeviceFamily.Equals("Windows.Desktop");

            if (canUseWebView2)
            {
                try
                {
                    CoreWebView2Environment.GetAvailableBrowserVersionString();
                }
                catch (Exception)
                {
                    canUseWebView2 = false;
                }
            }
            return(canUseWebView2);
        }
Пример #18
0
 private void tryRuntime(string path)
 {
     try
     {
         var availableBrowserVersionString = CoreWebView2Environment.GetAvailableBrowserVersionString(path);
         if (availableBrowserVersionString == null)
         {
             throw new Exception("缺少 WebView2 Runtime");
         }
         else
         {
             foundRuntime   = true;
             runtimePath    = path;
             runtimeVersion = availableBrowserVersionString;
         }
     }
     catch { }
 }
Пример #19
0
        public DebugForm()
        {
            InitializeComponent();

            _CreateToastButton.Click          += CreateToastButton_Click;
            _ClearToastHistoryButton.Click    += (_, _) => ToastNotificationManagerCompat.History.Clear();
            _CheckWebView2RuntimeButton.Click += (_, _) =>
            {
                try
                {
                    CoreWebView2Environment.GetAvailableBrowserVersionString();

                    Utils.ShowInfo("Debug", "Installed");
                }
                catch
                {
                    Utils.ShowError("Debug", "Installed");
                }
            };
        }
Пример #20
0
        private bool IsWebViewVersionInstalled()
        {
            string  versionNo  = null;
            Version asmVersion = null;

            try
            {
                versionNo = CoreWebView2Environment.GetAvailableBrowserVersionString();

                asmVersion = typeof(CoreWebView2Environment).Assembly.GetName().Version;

                //if (ver.Build >= asmVersion.Build)
                if (asmVersion.Build > 0)
                {
                    return(true);
                }
            }
            catch { }

            return(false);
        }
Пример #21
0
        // WebView2 runtime check
        private bool IsWebViewVersionInstalled()
        {
            try
            {
                string verNo = CoreWebView2Environment.GetAvailableBrowserVersionString();

                //Debug.WriteLine("versionNo:" + verNo);//versionNo: 91.0.864.41

                Version ver = new Version(verNo); //

                Version asmVerNo = typeof(CoreWebView2Environment).Assembly.GetName().Version;

                if (ver.Build >= asmVerNo.Build)
                {
                    return(true);
                }
            }
            catch { }

            return(false);
        }
Пример #22
0
        private bool IsWebView2Available()
        {
            string wv2Version = CoreWebView2Environment.GetAvailableBrowserVersionString();

            return(!string.IsNullOrEmpty(wv2Version));
        }
Пример #23
0
        private void ProcessFailed(object sender, CoreWebView2ProcessFailedEventArgs e)
        {
            string message = $"Browser process failed...{Environment.NewLine}Description: {Description}{Environment.NewLine}Version: { CoreWebView2Environment.GetAvailableBrowserVersionString()}{Environment.NewLine}Url: {CurrentUrl}{Environment.NewLine}Error: {e.ProcessFailedKind}";

            Errors.AddToCrashFile(message);
            Errors.ReportProblem(message, "Fear not though, Arksplorer will attempt to keep going!", "Browser crashed!");
            RecreateBrowser();
            Navigate(CurrentUrl);
        }
Пример #24
0
        public MainForm(string[] args)
        {
            string[] tryRuntimePaths =
            {
                // Fixed Version 固定版本
                AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "Runtime",
                // Evergreen 长青版
                null
            };
            foreach (string tryRuntimePath in tryRuntimePaths)
            {
                if (foundRuntime == false)
                {
                    tryRuntime(tryRuntimePath);
                }
            }

            if (foundRuntime)
            {
#if DEBUG
                var availableBrowserVersionString = CoreWebView2Environment.GetAvailableBrowserVersionString(runtimePath);
                MessageBox.Show("当前 WebView2 Runtime:\n" + (runtimePath == null ? "Evergreen Runtime" : "Fixed Version Runtime: " + runtimePath) + "\nVersion: " + availableBrowserVersionString, "YouTube");
#endif
            }
            else
            {
                MessageBox.Show("缺少 WebView2 Runtime,无法运行。\n可以通过以下任意一种方式安装:\n\n1. 安装任意非稳定通道 Microsoft Edge (Chromium) 浏览器。\n2. 安装 WebView2 Runtime Evergreen 版本。\n3. 将 WebView2 Runtime Fixed Version 版本放入 YouTube For Windows 的 Runtime 文件夹下。", "YouTube");
                Close();
                Application.Exit();
                return;
            }

            InitializeComponent();

            this.Icon = Resource.icon;

            screenWebViewPanel.Dock            = DockStyle.Fill;
            screenWebViewPanel.BackColor       = Color.Transparent;
            splashScreenWebViewPanel.Dock      = DockStyle.Fill;
            splashScreenWebViewPanel.BackColor = Color.Transparent;

            Controls.Add(splashScreenWebViewPanel); // 放置闪屏承载层(顶部)
            Controls.Add(screenWebViewPanel);       // 放置App承载层(底部)

            StringBuilder startupArgsBuilder = new StringBuilder();

            foreach (var arg in args)
            {
                switch (arg)
                {
                case "--allow-endscreen":
                {
                    allowEndscreen = true;
                }
                break;

                default:
                {
                    startupArgsBuilder.Append(arg + " ");
                }
                break;
                }
            }

            startupArgs = startupArgsBuilder.ToString();
        }
        public override void DoPreview <T>(T dataSource)
        {
            base.DoPreview(dataSource);

            // Starts loading screen
            InitializeLoadingScreen();

            // New webview2 element
            _webView = new WebView2();

            // Checks if dataSource is a string
            if (!(dataSource is string filePath))
            {
                throw new ArgumentException($"{nameof(dataSource)} for {nameof(MonacoPreviewHandler)} must be a string but was a '{typeof(T)}'");
            }

            // Check if the file is too big.
            long fileSize = new FileInfo(filePath).Length;

            if (fileSize < _settings.MaxFileSize)
            {
                try
                {
                    InvokeOnControlThread(() =>
                    {
                        ConfiguredTaskAwaitable <CoreWebView2Environment> .ConfiguredTaskAwaiter
                        webView2EnvironmentAwaiter = CoreWebView2Environment
                                                     .CreateAsync(userDataFolder: System.Environment.GetEnvironmentVariable("USERPROFILE") +
                                                                  "\\AppData\\LocalLow\\Microsoft\\PowerToys\\MonacoPreview-Temp")
                                                     .ConfigureAwait(true).GetAwaiter();
                        webView2EnvironmentAwaiter.OnCompleted(() =>
                        {
                            InvokeOnControlThread(async() =>
                            {
                                try
                                {
                                    if (CoreWebView2Environment.GetAvailableBrowserVersionString() == null)
                                    {
                                        throw new WebView2RuntimeNotFoundException();
                                    }

                                    _webView2Environment = webView2EnvironmentAwaiter.GetResult();
                                    var vsCodeLangSet    = FileHandler.GetLanguage(Path.GetExtension(filePath));
                                    string fileContent;
                                    using (StreamReader fileReader = new StreamReader(new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)))
                                    {
                                        fileContent = fileReader.ReadToEnd();
                                        fileReader.Close();
                                    }
                                    var base64FileCode = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(fileContent));

                                    string html;

                                    // prepping index html to load in
                                    using (StreamReader htmlFileReader = new StreamReader(new FileStream(Settings.AssemblyDirectory + "\\index.html", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)))
                                    {
                                        html = htmlFileReader.ReadToEnd();
                                        htmlFileReader.Close();
                                    }

                                    html = html.Replace("[[PT_LANG]]", vsCodeLangSet, StringComparison.InvariantCulture);
                                    html = html.Replace("[[PT_WRAP]]", _settings.Wrap ? "1" : "0", StringComparison.InvariantCulture);
                                    html = html.Replace("[[PT_THEME]]", Settings.GetTheme(), StringComparison.InvariantCulture);
                                    html = html.Replace("[[PT_CODE]]", base64FileCode, StringComparison.InvariantCulture);
                                    html = html.Replace("[[PT_URL]]", VirtualHostName, StringComparison.InvariantCulture);

                                    // Initialize WebView
                                    try
                                    {
                                        await _webView.EnsureCoreWebView2Async(_webView2Environment).ConfigureAwait(true);
                                        _webView.CoreWebView2.SetVirtualHostNameToFolderMapping(VirtualHostName, Settings.AssemblyDirectory, CoreWebView2HostResourceAccessKind.Allow);
                                        _webView.NavigateToString(html);
                                        _webView.NavigationCompleted += WebView2Init;
                                        _webView.Height = this.Height;
                                        _webView.Width  = this.Width;
                                        Controls.Add(_webView);
                                    }
                                    catch (NullReferenceException)
                                    {
                                    }
                                }
                                catch (WebView2RuntimeNotFoundException)
                                {
                                    Controls.Remove(_loading);

                                    // WebView2 not installed message
                                    Label errorMessage  = new Label();
                                    errorMessage.Text   = Resources.WebView2_Not_Installed_Message;
                                    errorMessage.Width  = TextRenderer.MeasureText(Resources.WebView2_Not_Installed_Message, errorMessage.Font).Width + 10;
                                    errorMessage.Height = TextRenderer.MeasureText(Resources.WebView2_Not_Installed_Message, errorMessage.Font).Height;
                                    Controls.Add(errorMessage);

                                    // Download Link
                                    Label downloadLink  = new LinkLabel();
                                    downloadLink.Text   = Resources.Download_WebView2;
                                    downloadLink.Click += DownloadLink_Click;
                                    downloadLink.Top    = TextRenderer.MeasureText(Resources.WebView2_Not_Installed_Message, errorMessage.Font).Height + 10;
                                    downloadLink.Width  = TextRenderer.MeasureText(Resources.Download_WebView2, errorMessage.Font).Width + 10;
                                    downloadLink.Height = TextRenderer.MeasureText(Resources.Download_WebView2, errorMessage.Font).Height;
                                    Controls.Add(downloadLink);
                                }
                            });
                        });
                    });
                }
                catch (Exception e)
                {
                    InvokeOnControlThread(() =>
                    {
                        Controls.Remove(_loading);
                        Label text  = new Label();
                        text.Text   = Resources.Exception_Occurred;
                        text.Text  += e.Message;
                        text.Text  += "\n" + e.Source;
                        text.Text  += "\n" + e.StackTrace;
                        text.Width  = 500;
                        text.Height = 10000;
                        Controls.Add(text);
                    });
                }

                this.Resize += FormResize;
            }
            else
            {
                InvokeOnControlThread(() =>
                {
                    Controls.Remove(_loading);
                    Label errorMessage  = new Label();
                    errorMessage.Text   = Resources.Max_File_Size_Error;
                    errorMessage.Width  = 500;
                    errorMessage.Height = 50;
                    Controls.Add(errorMessage);
                });
            }
        }