WPF 的 Webview2 控件在目标机器上不起作用
Webview2 control for WPF does not work on target machine
我有一个 wpf WebView2 控件可以在开发机器上运行但不能在目标机器上运行,也不会抛出任何错误,控件只是空白。它是一个 wpf net 5 项目。 Microsoft.Web.WebView2 1.0.818.41
WebView2 控件在 xaml 中声明为
<wv2:WebView2 Name="WebBrowser" Grid.Row="1" Source="https://www.microsoft.com"/>
在代码中调用:
public void LoadAddress(string webaddress)
{
try
{
WebBrowser.Source=new Uri(webaddress);
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
}
初始化为
var env = await CoreWebView2Environment.CreateAsync(userDataFolder: WorkingDirectory);
目标机器安装了 WebView2 运行时。
在目标机器上调用 LoadAddress 时没有任何反应,没有错误,控件是空白的。
我使用一个函数来检查版本,returns目标机器上的正确版本
version = typeof(CoreWebView2Environment).Assembly.GetName().Version;
我正在使用 Visual Studio 安装程序构建安装程序,这包括
"Microsoft.Web.WebView2": 依赖项中的“1.0.818.41”
"Microsoft.Web.WebView2/1.0.818.41": {
"runtime": {
"lib/netcoreapp3.0/Microsoft.Web.WebView2.Core.dll": {
"assemblyVersion": "1.0.818.41",
"fileVersion": "1.0.818.41"
},
"lib/netcoreapp3.0/Microsoft.Web.WebView2.WinForms.dll": {
"assemblyVersion": "1.0.818.41",
"fileVersion": "1.0.818.41"
},
"lib/netcoreapp3.0/Microsoft.Web.WebView2.Wpf.dll": {
"assemblyVersion": "1.0.818.41",
"fileVersion": "1.0.818.41"
}
},
"runtimeTargets": {
"runtimes/win-arm64/native/WebView2Loader.dll": {
"rid": "win-arm64",
"assetType": "native",
"fileVersion": "1.0.818.41"
},
"runtimes/win-x64/native/WebView2Loader.dll": {
"rid": "win-x64",
"assetType": "native",
"fileVersion": "1.0.818.41"
},
"runtimes/win-x86/native/WebView2Loader.dll": {
"rid": "win-x86",
"assetType": "native",
"fileVersion": "1.0.818.41"
}
}
}
任何见解都会有所帮助。谢谢
我进行了一些更改并使其正常运行。
该应用程序正在安装到目标机器程序文件文件夹,该文件夹在普通用户模式下是只读的。
WebView2 尝试在那里创建本地文件夹但失败了。
为克服此问题,您必须为 WebView2 本地文件夹指定另一个位置,用户将从该应用程序获得读写访问权限。
首先确保webview2控件的xaml声明中没有Source:
<wv2:WebView2 Name="WebBrowser" Grid.Row="1"/>
因为声明 Source 会先实例化控件,然后才能对其进行处理。
然后在 window 或类似这样的控件的 InitializeComponent 之后创建一个初始化方法
public async void InitializeWebView()
{
try
{
var env = await CoreWebView2Environment.CreateAsync(null,"C:\Temp");
await TopicWebBrowser.EnsureCoreWebView2Async(env);
TopicWebBrowser.Source = new Uri("https://www.google.com");
}
catch(Exception e)
{
MessageBox.Show(" Error in Web View "+e.Message, "Application");
}
}
我有一个 wpf WebView2 控件可以在开发机器上运行但不能在目标机器上运行,也不会抛出任何错误,控件只是空白。它是一个 wpf net 5 项目。 Microsoft.Web.WebView2 1.0.818.41
WebView2 控件在 xaml 中声明为
<wv2:WebView2 Name="WebBrowser" Grid.Row="1" Source="https://www.microsoft.com"/>
在代码中调用:
public void LoadAddress(string webaddress)
{
try
{
WebBrowser.Source=new Uri(webaddress);
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
}
初始化为
var env = await CoreWebView2Environment.CreateAsync(userDataFolder: WorkingDirectory);
目标机器安装了 WebView2 运行时。
在目标机器上调用 LoadAddress 时没有任何反应,没有错误,控件是空白的。
我使用一个函数来检查版本,returns目标机器上的正确版本
version = typeof(CoreWebView2Environment).Assembly.GetName().Version;
我正在使用 Visual Studio 安装程序构建安装程序,这包括
"Microsoft.Web.WebView2": 依赖项中的“1.0.818.41”
"Microsoft.Web.WebView2/1.0.818.41": {
"runtime": {
"lib/netcoreapp3.0/Microsoft.Web.WebView2.Core.dll": {
"assemblyVersion": "1.0.818.41",
"fileVersion": "1.0.818.41"
},
"lib/netcoreapp3.0/Microsoft.Web.WebView2.WinForms.dll": {
"assemblyVersion": "1.0.818.41",
"fileVersion": "1.0.818.41"
},
"lib/netcoreapp3.0/Microsoft.Web.WebView2.Wpf.dll": {
"assemblyVersion": "1.0.818.41",
"fileVersion": "1.0.818.41"
}
},
"runtimeTargets": {
"runtimes/win-arm64/native/WebView2Loader.dll": {
"rid": "win-arm64",
"assetType": "native",
"fileVersion": "1.0.818.41"
},
"runtimes/win-x64/native/WebView2Loader.dll": {
"rid": "win-x64",
"assetType": "native",
"fileVersion": "1.0.818.41"
},
"runtimes/win-x86/native/WebView2Loader.dll": {
"rid": "win-x86",
"assetType": "native",
"fileVersion": "1.0.818.41"
}
}
}
任何见解都会有所帮助。谢谢
我进行了一些更改并使其正常运行。 该应用程序正在安装到目标机器程序文件文件夹,该文件夹在普通用户模式下是只读的。
WebView2 尝试在那里创建本地文件夹但失败了。 为克服此问题,您必须为 WebView2 本地文件夹指定另一个位置,用户将从该应用程序获得读写访问权限。
首先确保webview2控件的xaml声明中没有Source:
<wv2:WebView2 Name="WebBrowser" Grid.Row="1"/>
因为声明 Source 会先实例化控件,然后才能对其进行处理。
然后在 window 或类似这样的控件的 InitializeComponent 之后创建一个初始化方法
public async void InitializeWebView()
{
try
{
var env = await CoreWebView2Environment.CreateAsync(null,"C:\Temp");
await TopicWebBrowser.EnsureCoreWebView2Async(env);
TopicWebBrowser.Source = new Uri("https://www.google.com");
}
catch(Exception e)
{
MessageBox.Show(" Error in Web View "+e.Message, "Application");
}
}