Также не забудьте групповые политики.Большинство (если не все) настройки IE также могут быть указаны в групповой политике.Согласно Параметр локальной групповой политики для страницы безопасности IE против страницы безопасности параметров Интернета Параметры групповой политики переопределяют пользовательские параметры.Итак, на моем домашнем ПК (работает без контроллера домена) у меня есть выбор для определения настроек IE либо через редактор локальной групповой политики, либо через Свойства обозревателя.Например, если я запускаю gpedit.msc, чтобы открыть редактор локальных групповых политик, выберите «Конфигурация компьютера \ Компоненты Windows \ Internet Explorer \ Панель управления обозревателем \ Страница безопасности> \ Изменить зону Интернета, измените настройку« Отображать смешанное содержимое »на« Включено », а затем выберите«Включить «в раскрывающемся списке, нажмите« Применить », затем откройте« Параметры безопасности для интернет-зоны в IE ». Я вижу, что« Отображать смешанное содержимое »изменено на« Включить »и выбор отключен, поскольку он переопределяется политикой.Для получения полного списка поддерживаемых политик загрузите WindowsServer2012 и Windows8GroupPolicySettings.xlsx из http://www.microsoft.com/en-us/download/details.aspx?id=25250
Теперь вернемся к вопросу о том, как изменить настройки программным способом.EricLaw правильно предложил использовать SetZoneActionPolicy из IInternetZoneManager.Но трудно найти примеры для вызова из 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();
После успешного тестирования приведенного выше кода на Win7 SP1 с IE 11 я решил вернуться к первоначальному предложению от EricLaw: изменить HKEY_CURRENT_USER \ Software\ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones \ * \ 1001, потому что именно это рекомендует Microsoft.См., Например, Как усилить параметры безопасности для зоны «Локальный компьютер» в Internet Explorer или Улучшенная безопасность просмотра