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

时间:2011-04-30 08:04:53

标签: c# .net windows internet-explorer

知道如何使用C#执行以下操作?

  1. 转到Tools -> Internet Options -> Security
  2. 选择Security标签
  3. 点击Custom Level按钮
  4. Miscellaneous部分将Display mixed content更改为Enable

4 个答案:

答案 0 :(得分:12)

执行此操作的“作弊”方法是更改​​值

  

HKEY_CURRENT_USER \软件\微软\的Windows \ CurrentVersion \互联网   设置\区\ 0 \ 1609   HKEY_CURRENT_USER \软件\微软\的Windows \ CurrentVersion \互联网   设置\区域\ 1 \ 1609   HKEY_CURRENT_USER \软件\微软\的Windows \ CurrentVersion \互联网   设置\区\ 2 \ 1609   HKEY_CURRENT_USER \软件\微软\的Windows \ CurrentVersion \互联网   设置\区\ 3 \ 1609   HKEY_CURRENT_USER \软件\微软\的Windows \ CurrentVersion \互联网   设置\区\ 4 \ 1609

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

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

答案 1 :(得分:5)

你不应该“以编程方式”这样做。这就是没有API的原因。只有用户可以更改其安全设置,并且他们使用您已经发现的内置界面来执行此操作。

可怜的IE团队一直在加班加点,试图加强浏览器的安全性。他们不会投入这样的东西,这会在几秒钟内使他们的所有努力无效 回想一下,即使选择了此选项,也会a confirmation dialog presented。您如何建议以编程方式“点击”? (嗯,第二个想法,不要告诉我。这可能是你要问的下一个问题。)

放弃尝试以编程方式执行此操作,并要求用户自己执行此操作。提供完整的帮助文件或其他文档,说明您要求他们进行此更改的原因,如果他们不选择进行此更改将会提供哪些功能,以及进行此类更改可能带来的安全风险。当然,还有关于如何进行更改的具体说明。

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

答案 2 :(得分:0)

另外请不要忘记组策略。大多数(如果不是全部)IE设置也可以在组策略中指定。 根据{{​​3}} 组策略设置覆盖用户定义的设置。 因此,在我的家用PC上(无域控制器)我可以选择通过本地组策略编辑器或Internet选项来定义IE设置。例如,如果我运行gpedit.msc打开本地组策略编辑器,请选择 计算机配置\ Windows组件\ Internet Explorer \ Internet控制面板\安全页面\ Internet区域 将“显示混合内容”设置更改为“已启用”,然后在下拉框中选择“启用”,单击“应用”, 然后在IE中打开Internet区域的安全设置 - 我将看到“显示混合内容”已更改为启用和 选择被禁用,因为它被Policy覆盖。 对于支持的策略的完整列表,请下载WindowsServer2012andWindows8GroupPolicySettings.xlsx 从 Local group policy setting for IE security page vs Internet options security page

现在回到如何以编程方式更改设置的问题。 EricLaw正确建议使用IInternetZoneManager中的SetZoneActionPolicy。 但很难找到从C#调用它的样本。 我最终复制了 http://www.microsoft.com/en-us/download/details.aspx?id=25250 进入我的代码然后做:

//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);

我也尝试过以编程方式更改组策略。 我用的是图书馆 http://www.pinvoke.net/default.aspx/Interfaces.IInternetZoneManager 然后:

//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 直接因为这是微软推荐的。例如,请参阅https://bitbucket.org/MartinEden/local-policyHow to strengthen the security settings for the Local Machine zone in Internet Explorer

答案 3 :(得分:-1)

我不确定,但我认为您可以在“注册表”中找到所有这些设置。您需要找到合适的密钥。要更改这些值,您需要拥有适当的权利。可以从.net代码

访问注册表