C#WebBrowser控件增强的保护模式

时间:2018-12-10 11:26:19

标签: c# wpf internet-explorer webbrowser-control activex

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

webbrowser控件显示以下错误:

  

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

据我所知,我尚未启用增强的保护模式。

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

  

基于.NET的页面的Centricity容器初始化失败。确保您的.NET环境已配置为授予对此网站“完全信任”。

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

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

任何建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

问题可能是网络浏览器默认使用旧版本的IE。看看Use latest version of Internet Explorer in the webbrowser control

答案 1 :(得分:0)

webbrowser控件由用COM包装器包装的ie11包装,该包装器将ie11调回到ie7模式。我可以想象会导致您出现问题的其他地方。

由于在外部运行ie11时此页面为您工作,因此最可能的解释似乎是您试图将控件强制进入ie11模式。 我建议您在这里尝试Mentor的代码:

Set WPF webbrowser control to use IE10 mode

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

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 += " ( Первый раз запускать с правами админа )";