Open mercethereal opened 3 years ago
@mercethereal Thanks for the report! If you debug with Visual Studio, could you try enabling all exceptions (VS > Debug menu > Windows > Exception Settings)? Or could you try explicitly initializing the control using EnsureCoreWebView2Async? Both of those help to surface errors that otherwise can be suppressed.
@mercethereal Perhaps it's an issue with your antivirus. Not sure if you use Symantec Endpoint Protection (SEP), but someone found an issue when using an older version of it (see #443).
Symantec Endpoint Protection (SEP) issue Chrome and Chromium are also impacted when installed on any Operating System (OS) with a SEP version older than 14.2 RU2 MP1
In versions of Google Chrome (chrome.exe) and versions of Microsoft Edge Chromium, Microsoft's Code Integrity feature is enabled. SEP Application Control technology is not compatible with this feature in Chrome/Chromium.
Please update to 14.2 RU2 MP1 build 14.2.5569.2100
_If upgrading SEP is not an option, or the OS is one of those listed above, the incompatibility can be worked around by adding an Application Control exception for Chrome (Chrome.exe) and/or Microsoft Edge Chromium (MSEdge.exe).__
@cgeier No, we don't have Symantec Endpoint Protection. We use ESET according to my sysadmin.
@champnic Ok, I enabled all the exceptions, and added this code under InitializeComponent
CoreWebView2Environment env = CoreWebView2Environment.CreateAsync("", System.IO.Path.GetTempPath(), null).GetAwaiter().GetResult(); webView.EnsureCoreWebView2Async(env);
We still have the same issue... A blank pops up, no exceptions raised, nothing happens.
Hm, this is strange. Given there are no errors during initialization, I wonder if it's something to do with the Server 2012 configuration, blocking the network request for microsoft.com or something? Could you try navigating to a local html file or html string after it's initialized:
webView.NavigateToString(@"<!DOCTYPE html><html><body><h1>Hello world!</h1></body></html>");
@champnic Thanks for your reply. even in Windows 10, that NavigateToString line is throwing the exception (below). The exception doesn't make sense since I am both setting the source and initializing with EnsureCoreWebView2Async.
I don't think the server is blocking www.microsoft.com. The main application I'm trying to push into production is reading from a local file. The same thing is happening, i.e. blank screen.
System.InvalidOperationException HResult=0x80131509 Message=Attempted to use WebView2 functionality which requires its CoreWebView2 prior to the CoreWebView2 being initialized. Call EnsureCoreWebView2Async or set the Source property first. Source=Microsoft.Web.WebView2.Wpf StackTrace: at Microsoft.Web.WebView2.Wpf.WebView2.VerifyCoreWebView2() at Microsoft.Web.WebView2.Wpf.WebView2.NavigateToString(String htmlContent) at WpfApp1.MainWindow..ctor() in C:\Users\whitne\source\repos\WpfApp1\MainWindow.xaml.cs:line 20
@mercethereal, @champnic l I was able to able to reproduce the issue -- the blank screen. The issue is occurring because you're not using await
with webView.EnsureCoreWebView2Async(env);
, so execution is continuing without waiting for the initialization to complete. webView.EnsureCoreWebView2Asyc
is a Task
not void
. If the Task needs to complete before continuing, it's necessary to use await
. In order to use await
one needs to specify async
, which isn't possible with a constructor. Therefore, if one wishes to perform WebView2 initialization, it needs to happen in Window-Loaded
.
MainWindow.xaml
...
Window x:Class="WebView2Testv10674.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
xmlns:local="clr-namespace:WebView2Testv10674"
mc:Ignorable="d"
Loaded="Window_Loaded"
Title="MainWindow" Height="450" Width="800">
...
MainWindow.xaml.cs
Incorrect:
public MainWindow()
{
InitializeComponent();
webView21.EnsureCoreWebView2Async();
}
Correct:
private async void Window_Loaded(object sender, RoutedEventArgs e)
{
//wait for CoreWebView2 initialization
await webView21.EnsureCoreWebView2Async();
}
WebView2Testv10674 - correct.zip WebView2Testv10674 - incorrect.zip
Here's the result of running the incorrect version:
Here's the result of running the correct version:
In the incorrect version, notice that Window loaded
message appears before webview21_CoreWebView2Ready
message.
In the correct version, Window loaded
message appears after webview21_CoreWebView2Ready
message.
@champnic It appears that the WebView2 - GettingStarted documentation is incorrect under Step 7 - Communication between host and web content
. The documentation shows:
public MainWindow()
{
InitializeComponent();
webView.NavigationStarting += EnsureHttps;
InitializeAsync();
}
async void InitializeAsync()
{
await webView.EnsureCoreWebView2Async(null);
}
It should be:
public MainWindow()
{
InitializeComponent();
}
private async void Window_Loaded(object sender, RoutedEventArgs e)
{
await InitializeAsync();
webView.NavigationStarting += EnsureHttps;
}
async Task InitializeAsync()
{
await webView.EnsureCoreWebView2Async(null);
}
@cgeier I took your WebView2Testv10674 - correct.zip https://github.com/MicrosoftEdge/WebView2Feedback/files/5645226/WebView2Testv10674.-.correct.zip solution verbatim and made the following change:
//set Source property - navigate to URL
//webView21.Source = new Uri("https://www.microsoft.com",
UriKind.Absolute); webView21.NavigateToString(@"<!DOCTYPE html>
Once again it works great in windows 10, but in Server 2012, it's just a blank window....
On Fri, Dec 4, 2020 at 1:17 PM cgeier notifications@github.com wrote:
I was able to able to reproduce your result. The issue is occurring because you're not using await with webView.EnsureCoreWebView2Async(env);, so execution is continuing without waiting for the initialization to complete. In order to use await one needs to specify async, which isn't possible with a constructor. Therefore, if one wishes to perform WebView2 initialization, it needs to happen in Window-Loaded.
Incorrect:
public MainWindow() { InitializeComponent();
webView21.EnsureCoreWebView2Async();
}
Correct:
private async void Window_Loaded(object sender, RoutedEventArgs e) { //wait for CoreWebView2 initialization await webView21.EnsureCoreWebView2Async(); }
WebView2Testv10674 - correct.zip https://github.com/MicrosoftEdge/WebView2Feedback/files/5645226/WebView2Testv10674.-.correct.zip WebView2Testv10674 - incorrect.zip https://github.com/MicrosoftEdge/WebView2Feedback/files/5645229/WebView2Testv10674.-.incorrect.zip
Here's the result of running the incorrect version:
[image: Webview2-Output-Incorrect] https://user-images.githubusercontent.com/34412039/101210391-66c7a200-3643-11eb-9c80-bb0b3708b43e.JPG
Here's the result of running the correct version:
[image: Webview2-Output-Correct] https://user-images.githubusercontent.com/34412039/101210428-76df8180-3643-11eb-9bd5-f1f4ff97af76.JPG
In the incorrect version, notice that Window loaded message appears before webview21_CoreWebView2Ready message. In the correct version, Window loaded message appears after webview21_CoreWebView2Ready message.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/MicrosoftEdge/WebView2Feedback/issues/675#issuecomment-738996828, or unsubscribe https://github.com/notifications/unsubscribe-auth/AB4JR4UJR6I3MONU57P3PODSTE7VFANCNFSM4UCQRBTA .
@mercethereal Find the MS Edge version that WebView2 is trying to use. Add the following line of code to Window_Loaded
:
MessageBox.Show(Microsoft.Web.WebView2.Core.CoreWebView2Environment.GetAvailableBrowserVersionString(), "MS Edge Version", MessageBoxButton.OK, MessageBoxImage.Information);
So you'll have:
private async void Window_Loaded(object sender, RoutedEventArgs e)
{
//wait for CoreWebView2 initialization
await webView21.EnsureCoreWebView2Async();
MessageBox.Show(Microsoft.Web.WebView2.Core.CoreWebView2Environment.GetAvailableBrowserVersionString(), "MS Edge Version", MessageBoxButton.OK, MessageBoxImage.Information);
}
Mine shows: 88.0.705.9 dev
@cgeier The messagebox worked on the server 2012. It came up with 87.0.664.55
@mercethereal After testing (on a fresh install of Windows Server 2012 Standard), I found that the issue exists when using MS Edge Chromium v.87.0.664.55 on Windows Server 2012 Standard -- the msedgewebview2.exe processes seem to crash. However, it works if MS Edge Chromium v. 88.0.673.0 (or 88.0.705.9) is installed. I didn't test any other versions.
You can download later versions of MS Edge Chromium from MS Edge Business
@cgeier Thanks a lot for doing all of that testing and setup work..
That version, v.87.0.664.55, is the runtime version which we got from Here:, https://developer.microsoft.com/en-us/microsoft-edge/webview2/. I believe that is the latest version of the runtime.
We are looking to see if we can install the full blown browser on the server and if it will impact any other applications installed on there. If we could find a more recent version of the runtime, we would try it out..
@mercethereal
I am having a similar issue as you describe here. I installed the desktop chrome beta branch and was not able to get that to work either. Similar blank screen and mild locking up the PC. I followed the steps in this article and was able to get the desktop version working, but not runtime in my app. I'm using version 87.0.664.75 of the runtime. I've also attempted to use a beta branch of chromium and get the same blank page. So both runtime and edge beta have the same issue.
After some digging I see that msedgeview2.exe is logging some security errors related to SeTcbPrivilege.
Process: Process ID: 0x4bf4 Process Name: C:\Program Files (x86)\Microsoft\EdgeWebView\Application\87.0.664.75\msedgewebview2.exe
Service Request Information: Privileges: SeTcbPrivilege
This seems to be the reason for the failure, but I cannot confirm. Just wanted to chime in here since I am at a loss as to what to do now.
@aseme Can you share what versions of the SDK you are using? And when you say "desktop version" is working, what are you referring to? All WebView2 apps will need a runtime, either a prerelease Microsoft Edge (Canary, Dev, or Beta), or the WebView2 Runtime.
@champnic
Sorry my word choice was poor. I attempted to use the standalone evergreen runtime from this page and I also attempted to use the beta channel of MS Edge.
WebView2 SDK: 1.0.721-prerelease WebView Runtime: 88.0.705.50 MS Edge Beta: 89.0.767.0 .Net Framework 4.7 - Winforms
Here is some more context. So we distribute our application through a Citirx storefront. I can also directly RDP into the server to run the application. The app will not load the browser control on the server, but will load it when running locally. I'm using explicit initialization of the WebView2 objects and I am doing that before any calls to Navigate or the Source property. To me this seems to be related to a config on the MS server 2012 R2 machine, but I cannot manage that server directly so I cannot be 100% sure.
Thanks for the clarification. Sounds like it is limited to the server and possibly linked to the configuration of that server. Are you able to test on a different server machine/VM? One that you have control over, to see if it affects all servers or just the configuration of that particular one?
@champnic
Another update!
Took a bit, but I was able to get a clean install of Windows server 2012 R2 provisioned and did my testing. The control works up until we install the Citrix components on the server. After that I the control will not start and I get the same errors mentioned above. I've also seen a few other stackoverflow posts about the control not working on Citrix.
So at this point I'm unsure what to do and unsure if you would be able to help me or if I need to reach out to someone else.
Thanks
That's a great find, thanks @aseme! I've opened this issue as a bug on our backlog to track.
We too are experiencing this problem on a server with Citrix installed. Works fine installed on local machines, as soon as we promoted it to an environment to be deployed, upon opening it just freezes when we try to display the window with the WebView2 control
We are using WinForms, so this is more than a WPF issue
@champnic I don't suppose there is any thought at this point as to the root cause of issues on a Citrix server? We got caught extremely flat footed by this, we just moved a 8-month long project into user acceptance testing when we found this. Since we have to operate in Citrix with a massive 20-yr old WebForms application for our users, we can't jump to a pure web application anytime soon. If this is some sort of Citrix configuration or COM security issue or something like that and can be worked around, I'd love to hear it... likewise, if this is not a short-term priority in your backlog and there is no work around, then we need to know so we can engineer a new solution that doesn't use WebView2.
We haven't taken a look yet, but I'll up the priority and try to get someone looking at this next week. Our team doesn't have experience deploying Citrix so that may slow down our investigation a bit while we get ramped up.
@aseme Looking at the article: https://www.petenetlive.com/KB/Article/0001657
Can you try the described workaround but use msedgewebview2.exe
instead of msedge.exe
?
open the registry Editor (regedit) and navigate to;
HKEY_LOCAL_MACHINE > System > CurrentControlSet > Services > CtxUvi Locate the UviProcesExcludes REG_SZ value, edit it and add ~‘msedge.exe;‘~ 'msedgewebview2.exe' to the end.
Theres probably one service you can restart, but I simply rebooted the server, (problem solved).
Here are the same instructions from Citrix support: https://support.citrix.com/article/CTX286837
We tried this and it doesn't seem to make a difference for us
Per #1082, can you try these instructions? https://support.citrix.com/article/CTX107825
@dguisinger There is a 14 char limit for process names, try removing .exe from msedgewebview2.exe.
@champnic @dguisinger
Wow sorry for such a late reply on this issue. We got our solution working with the provided above solution and updating the Citrix VDA. So with the regedit solution and an update to our Citrix Agent we were able to get WebView2 working on our servers.
Update:
Here is a brief summary of that our Citrix team did to fix this issue:
Upgraded the Citrix VDA to 1912 Cumulative Update 2, then added the CTXUvi processes in the registry
Thanks @aseme for adding the details, I'm reaching out to our Citrix team on this. I had mentioned it to them 2 days ago and they said there was a constraint as to why the cluster wasn't running the latest and greatest, so I'll find out what they have to say with these details.
@champnic using "msedgewebview2" instead of "msedgewebview2.exe" didn't make a difference.
That's a great find, thanks @aseme! I've opened this issue as a bug on our backlog to track.
@champnic This is a very urgent issue for us, is the bug on your backlog public (for us to track as well)? Any recent update on the issue?
@groege Can you add some info on what's not working for you? What version of Citrix are you using, and have you reached out to Citrix about a conflict with WebView2?
Webview2 was not working until adding "msedgewebview2" to "UviProcesExcludes". Generally we do not know what Versions our are customers are using (not even sure how many use Citrix at all) If there is a minimum Citrix Version recommended, please inform us so we can at least add it to our system requirements for our software. We have testet it with Version "7.15 LTSR" Can you tell us if the Bug you created is publicly available? We didn't reach out to Citrix yet, since we assumed its a problem of WebView2 because of your post about tracking the problem internally.
@groege In this case the bug is on Citrix's end. We're trying to reach out to Citrix as well to have them update the default list in "UviProcessExcludes". The bug is not publicly available - this issue is our external facing tracking item.
@groege @dguisinger @AndersAlfredsson @aseme Hi, thanks for bringing up the issue to Citrix. May I know what version of XenDesktop / CVAD, OS and webview2 runtime are you using ? I saw someone commented this issue is reproducible with webView2 runtime v.87.0.664.55. Is it still reproducible in newer webView2 runtimes as well ?
@groege @dguisinger @AndersAlfredsson @aseme Hi, thanks for bringing up the issue to Citrix. May I know what version of XenDesktop / CVAD, OS and webview2 runtime are you using ? I saw someone commented this issue is reproducible with webView2 runtime v.87.0.664.55. Is it still reproducible in newer webView2 runtimes as well ?
The problem hasn't been solved so far in Version: 98.0.1108.56 Adding the Registry Entry is still the way to go so far... Please contact the citrix Support ==> we asked them to do it but it seems they will only do something themselves if enough people are complaining about the issue...
Hi @groege , thanks for your reply. I work at Citrix HDX Engineering team and we were notified by Microsoft about this case.
Could you please describe more about your environment details like OS version and patch level, Xendesktop / CVAD version, .NET runtime version and any other relevant information that can help us reproduce the issue on our end (so far, we couldn't reproduce this).
I am using the following simple WebView2 app for testing. https://github.com/MicrosoftEdge/WebView2Samples/tree/master/GettingStartedGuides/WPF_GettingStarted
Can you test this app and see if you get similar blank screen ?
Description Can't get a small test WPF project to work on server 2012. Comes up in a blank window. It works fine in windows 10 Here is the XAML: ` <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf" xmlns:local="clr-namespace:WpfApp1" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800">
`
and here is the c# code
using System.Windows; namespace WpfApp1 { ///
/// Interaction logic for MainWindow.xaml
///
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
Version SDK: 1.0.674-prerelease Runtime: using the runtime 87.0.664.47 Framework: .NET 4.8 OS: Server 2012 no service pack
Repro Steps -set up a minimal WPF project in visual studio with the code listed above along with .net framework 8 -deploy the solution along with the runtime(version listed above) to server 2012 R2 -should display a window with the embedded browser that navigates to www.microsoft.com -What we are getting is a blank window. No error messages
Screenshots
Additional context
AB#31697767