首页 > 解决方案 > C# WebBrowser 控件增强保护模式

问题描述

我正在尝试通过 WebBrowser 控件访问一个网页(不受我控制),即allscripts 沙箱。我的计算机的 Internet Explorer 已为所述网页正确设置(已添加到受信任的站点、允许并安装所有 active-x 插件、以兼容模式运行等)。

webbrowser 控件显示以下错误:

此网页想要运行与 Internet Explorer 的增强安全功能不兼容的“某些 ActiveX 控件”。如果您信任此站点,您可以禁用此站点的增强保护模式并允许控件运行。

我没有启用(据我所知)增强保护模式。

还尝试忽略错误并继续登录会显示一条消息

Centricity 的基于 .NET 页面的容器无法初始化。确保您的 .NET 环境已配置为向本网站授予完全信任。

在我运行命令之前,以上也是默认 IE 上的错误%WINDIR%\Microsoft.NET\Framework\v2.0.50727\caspol -q -m -cg Trusted_Zone FullTrust

我尝试了各种注册表项,但似乎都没有。
我还尝试实现一个自定义 IInternetSecurityManager 将所有 url 映射到区域 Trusted 并在所有 ProcessUrlAction 调用上返回 URLPOLICY_ALLOW。

任何建议将不胜感激。

标签: c#wpfinternet-explorerwebbrowser-controlactivex

解决方案


webbrowser 控件是用 com 包装器包装的 ie11,该包装器将 ie11 节流回 ie7 模式。我可以想象那里没有太多其他事情会导致您的问题。

由于当您在外部运行 ie11 时此页面适用于您,因此最可能的解释似乎是您尝试强制控制进入 ie11 模式是问题所在。我建议你在这里试试 Mentor 的代码:

将 WPF webbrowser 控件设置为使用 IE10 模式

这将自动将正在运行的程序的名称添加到注册表中。

var pricipal = new System.Security.Principal.WindowsPrincipal(
 System.Security.Principal.WindowsIdentity.GetCurrent());
 if(pricipal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator)) {
    RegistryKey registrybrowser = Registry.LocalMachine.OpenSubKey
     (@"Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);
string myProgramName = Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().Location);
var currentValue = registrybrowser.GetValue(myProgramName);
if (currentValue == null || (int)currentValue != 0x00002af9)
    registrybrowser.SetValue(myProgramName, 0x00002af9, RegistryValueKind.DWord);
}
else
this.Title += " ( Первый раз запускать с правами админа )";

推荐阅读