以编程方式更改Internet Explorer设置?

任何想法如何使用C#执行以下操作?

  1. Tools -> Internet Options -> Security
  2. selectSecurity选项卡
  3. 点击Custom Levelbutton
  4. Miscellaneous部分更改Display mixed contentEnable

这样做的“作弊”方式是改变价值

HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones \ 0 \ 1609 HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones \ 1 \ 1609 HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones \ 2 \ 1609 HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones \ 3 \ 1609 HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones \ 4 \ 1609

其中0-4是区域标识符,值为0表示允许,1表示提示,3表示阻止。 请记住,如果您的代码在任何人的计算机上执行此操作,而您自己的代码则可能会将您的代码视为恶意软件。

执行此操作的“正确”方法是使用API​​创建IInternetZoneManager,然后调用SetZoneActionPolicy来调整要调整的区域中的URLACTION_HTML_MIXED_CONTENT的设置。

你不应该这样做“编程”。 这就是为什么没有它的API。 只有用户可以更改他们的安全设置,并且可以使用您已经发现的内置界面来完成。

可怜的IE团队一直在加紧工作,试图加强浏览器的安全性。 他们不会抛出像这样的东西,在几秒钟内就会使所有的努力无效。
回想一下,即使选择了这个选项,也会出现一个确认对话框 。 你如何建议以编程方式“点击”? (嗯,再次想到,不要告诉我,这可能是你会问的下一个问题。)

试图以编程方式做到这一点,并要求用户自己做。 请提供完整的帮助文件或其他文档,说明您为什么要求他们进行此更改,如果他们不选择进行此更改,哪些功能将不可用,以及进行此类更改可能存在哪些安全风险。 当然,关于如何进行更改的具体说明。

或者,更好的是,重新设计你的应用程序,以便它不需要对IE的安全设置进行系统范围的修改。 很难想象这是一个合法的案例。 更好的解决方案可能会要求用户将您的网站添加到他们的“受信任的网站”。 请记住,默认情况下本地页面与远程页面具有不同的安全设置。

另外不要忘记组策略。 大多数(如果不是全部的话)IE设置也可以在组策略中指定。 根据IE安全页面与Internet选项安全页面的本地组策略设置,组策略设置将覆盖用户定义的设置。 所以,在我的家用电脑(没有域控制器的工作),我可以选择通过本地组策略编辑器或通过Internet选项来定义IE设置。 例如,如果我运行gpedit.msc打开本地组策略编辑器,选择计算机配置\ Windows组件\ Internet Explorer \互联网控制面板\安全页\互联网区域更改“显示混合内容”设置为“已启用”,然后选择“启用“下拉框中,单击应用,然后在IE中打开Internet区域的安全设置 – 我将看到”显示混合内容“更改为启用,并且选择被禁用,因为它被策略覆盖。 有关支持策略的完整列表,请从http://www.microsoft.com/zh-CN/download/details.aspx?id=25250下载Windowsserver2012和Windows8GroupPolicySettings.xlsx

现在回到如何以编程方式更改设置的问题。 EricLaw正确地建议使用IInternetZoneManager中的SetZoneActionPolicy。 但是从C#中调用它很难找到样本。 我结束了复制http://www.pinvoke.net/default.aspx/Interfaces.IInternetZoneManager到我的代码,然后做:

 //This will disable "Download signed ActiveX" (IE setting # 0x1001) for Internet Zone (zone #3) IInternetZoneManager izm = Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("7b8a2d95-0ac9-11d1-896c-00c04Fb6bfc4"))) as IInternetZoneManager; IntPtr pPolicy = Marshal.AllocHGlobal(4); Marshal.Copy(new int[] { 3 }, 0, pPolicy, 1);//3 means "Disable" int result = izm.SetZoneActionPolicy((uint)UrlZone.Internet, (uint)0x1001, pPolicy, 4, (uint)UrlZoneReg.CurrentUserKey); Marshal.ReleaseComObject(izm); Marshal.FreeHGlobal(pPolicy); 

我也尝试以编程方式更改组策略。 我从https://bitbucket.org/MartinEden/local-policy使用库,然后:

 //This will disable "Download signed ActiveX controls" computer policy for Internet Zone (zone #3) const string keyPath = @"SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3"; var gpo = new LocalPolicy.ComputerGroupPolicyObject(); using (var machine = gpo.GetRootRegistryKey(LocalPolicy.GroupPolicySection.Machine)) { using (var terminalServicesKey = machine.CreateSubKey(keyPath)) { terminalServicesKey.SetValue("1001", 3, Microsoft.Win32.RegistryValueKind.DWord); } } gpo.Save(); 

在使用IE 11在Win7 SP1上成功测试上面的代码后,我决定回到EricLaw的原始建议:直接修改HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones \ * \ 1001,因为这是Microsoft推荐。 例如,请参阅如何在Internet Explorer或增强型浏览安全性中强化 本地计算机区域的安全设置

我不知道,但我想你可以在“注册表”中找到所有这些设置。 你需要找出适当的关键。 要改变这些价值,你需要有适当的权利。 注册表可以从.net代码访问