c# - 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。
任何建议将不胜感激。
解决方案
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 += " ( Первый раз запускать с правами админа )";
推荐阅读
- php - 在 office 365 中未使用两步验证发送 SMTP 邮件
- security - 反射 XSS(跨站点脚本)攻击是否会发生在提供非 HTML 响应的 REST API 上
- javascript - Typescript - X 类型缺少 X 类型的以下属性
- kdb - KDB/Q:按组计算百分比
- java - 删除 1px 填充右线性布局空白空间
- geopandas - GeoPandas:计算六边形和 lineStrings 交叉点
- regex - 仅替换标题中的字符
- azure-devops - 如何配置 QA 阶段以运行冒烟测试?
- android - 如何以编程方式使用密码解锁安卓手机
- r - 如何让 R 在表中包含列名?