我在 Windows 安装上安装了相对较新的 Visual Studio 2022。我所做的工作经常需要管理权限(本地 IIS)。为此,我有两个用户,一个登录 Windows 的“普通”帐户和一个管理员帐户。使用管理员帐户启动VS2022时,不断出现错误。特别是在调试过程中会发生这种情况,内容如下:
Microsoft Edge can't read and write to its data directory:
C:\Users\<administrator_user>\AppData\Local\Temp\VSWebView2Cache\<guid>\EBWebView
Run Code Online (Sandbox Code Playgroud)
似乎发生的情况是,Microsoft Edge WebView2 (msedgewebview2.exe) 以登录 Windows 的用户身份运行,同时尝试为管理员用户写入临时文件,而管理员用户没有(也不应该)具有写入或读取访问权限。
在这里我们可以看到进程详细信息,表明应用程序用户是登录用户而不是管理员:
有谁知道如何解决这个问题?
即使我在 .net 5 控制台应用程序上运行调试,也会发生该错误。在这种特殊情况下,我不明白为什么它需要在 WebView 实例中运行任何内容,但显然某些后台进程正在运行某些内容。这是可以关闭的东西吗?
在我的 WPF 应用程序中,我需要显示一个 html 字符串,并且我知道我需要在调用 NavigateToString 之前调用 EnsureCoreWebView2Async 方法,否则 CoreWebView 将为 null 并且我会遇到异常。问题是等待 EnsureCoreWebView2Async 永远不会结束。
我创建了一个小应用程序来重现问题(并排除与我的大项目相关的问题),问题是相同的。
以下是示例应用程序的代码(我的主窗口有 2 个按钮,一个用于打开 url,一个用于加载 html 字符串 - 第一个起作用):
<Window x:Class="WebViewApp.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:local="clr-namespace:WebViewApp" xmlns:wpf="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<StackPanel>
<Button Width="200" Height="40" Click="OpenUrl_Click">Open url</Button>
<Button Width="200" Height="40" Click="OpenHtml_Click">Open html</Button>
</StackPanel></Window>
Run Code Online (Sandbox Code Playgroud)
MainWindow后面的代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private async …
Run Code Online (Sandbox Code Playgroud) 我正在考虑将项目从 cef (CefSharp) 迁移到 WebView2 WPF。我的初步测试表明 WebView2 API 具有我需要的该端口的接口。我担心我会错过一些可能阻止我切换到 WebView2 的东西,我会在过渡的后期阶段解决这个问题。如果有人经历过这个过程,请分享我是否需要了解可能成为此过渡的障碍的事情。WebView2 中是否缺少来自 cef 的重要 API?
string text = "return 'test';";
var webView = new Microsoft.Web.WebView2.WinForms.WebView2();
webView.EnsureCoreWebView2Async(null).RunSynchronously();
var srun = webView.CoreWebView2.ExecuteScriptAsync(text);
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码 EnsureCoreWebView2Async 时出现此异常
“设置后无法更改线程模式。(HRESULT 异常:0x80010106 (RPC_E_CHANGED_MODE))”
我需要做什么才能在控制台或 Windows 服务中没有 winform dlg 的情况下运行它?
如何使用 Visual Studio 在 C# windows 应用程序中使用 Microsoft Edge WebView2 控件?
我采用了最新版本的 Microsoft.Web.WebView2(0.9.515-预发行版)并添加到测试 C# WinForms 应用程序中。我使用的是 VS 2019,.NET 框架是 4.7.2。将 WebView2 控件放在表单上,编译并运行。应用程序在加载时崩溃,位于 Form1.designer.cs 中的以下位置。
// webView21
//
this.webView21.Location = new System.Drawing.Point(153, 66);
this.webView21.Name = "webView21";
this.webView21.Size = new System.Drawing.Size(492, 253);
this.webView21.Source = new System.Uri("about:blank", System.UriKind.Absolute);
this.webView21.TabIndex = 0;
this.webView21.Text = "webView21";
this.webView21.ZoomFactor = 1D;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.webView21); //CRASHED HERE WITH BELOW EXCEPTION -
Run Code Online (Sandbox Code Playgroud)
当我在 Release 模式下运行它时,得到以下异常跟踪 - System.NullReferenceException: Object reference not set to an instance of …
我将一种可工作的 Excel VBA 应用程序(该应用程序将 IE 自动化)作为我为我的妻子编写的网络抓取和下订单系统的一部分移动到了 C#/Windows Forms/WebView2,她花了几个小时被 90 年代风格的 Usborne Children Books Consultant Portal 折磨。项目。
目前看来,基础知识还不具备。
例如...
1- if(browser.navigationComplete == true){
That simple check isn't available.
How is one supposed to flow sequences of user actions without this?
2- htmlagilitypack like tools?
In VBA you can easily work with the DOM since there's types for pretty much everything. Where's that in WebView2?
Run Code Online (Sandbox Code Playgroud)
也许我理解错了,但看起来 webview2 只是一个浏览器,没有 VBA 二十多年来所拥有的自动化工具。请告诉我,我不必爬回中世纪的 Excel VBA 地牢。我已经看到了光明,这很好!
任何架构或实际测试的工作代码将不胜感激:)
感谢您从温哥华,
安托万
WebView2控件:如下所示,HTML 字符串通过事件内的NavigateToString(...)Button_Click(...)
调用成功加载。但我需要在加载Window
和/或其Grid
加载后立即加载 HTML 字符串。MainWindow(){...}
但是构造函数内或事件内的以下代码rootGrid_Loadded(...)
会引发如下错误:
问题:我们怎样才能解决问题并在加载或HTML string
后立即加载?或者有更好的解决方案/解决方法吗?Window
Grid
主窗口.xaml:
<Window x:Class="WpfWebView2TEST.MainWindow"
.....
xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
mc:Ignorable="d"
Style="{StaticResource CustomWindowStyle}"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Button x:Name="btnTest" Content=Test" Click="btnTest_Click"/>
<wv2:WebView2 Name="MyWebView" />
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
注意:在以下构造函数中调用 MyLoadHTMLString() 或rootGrid_Loaded(...)
事件会引发如下错误:
MainWindow.xaml.cs:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MyLoadHTMLString();
}
........
}
private void rootGrid_Loaded(object sender, RoutedEventArgs e)
{
MyLoadHTMLString();
}
public void MyLoadHTMLString() …
Run Code Online (Sandbox Code Playgroud) 我正在创建 Microsoft.Web.WebView2.WinForm.WebView2 的对象,但此 coreWebView2 的子对象为空
Microsoft.Web.WebView2.WinForm.WebView2 webView = new Microsoft.Web.WebView2.WinForm.WebView2()
// Change some GUI properties of webView
webView.CoreWebView.NavigateUrl(url)
// I can not access the above line because CoreWebView is null
Run Code Online (Sandbox Code Playgroud) 我想知道是否有办法阻止 webview2 组件在 win 表单中打开浏览器窗口
我到处找,但没找到,但我确实找到了,但它使用了 XAML/UWP
一页使用了 xaml,但代码无法工作,因为它的 XAML 和我使用 c#