Además, no olvide las Políticas de grupo. La mayoría (si no todas) las configuraciones de IE también se pueden especificar en las Políticas de grupo. De acuerdo con Local group policy setting for IE security page vs Internet options security page , la configuración de la directiva de grupo anula la configuración definida por el usuario. Por lo tanto, en mi PC hogareña (funciona sin controlador de dominio) tengo la opción de definir la configuración de IE a través del Editor de políticas de grupo local o a través de Opciones de Internet. Por ejemplo, si ejecuto gpedit.msc para abrir el Editor de directivas de grupo local, seleccione Configuración del equipo \ Componentes de Windows \ Internet Explorer \ Panel de control de Internet \ Página de seguridad \ Zona de Internet cambie la configuración "Mostrar contenido mixto" a "Activado", luego seleccione "Habilitar" en el cuadro desplegable, haga clic en Aplicar, y luego abra la Configuración de seguridad para la Zona de Internet en IE - Veré que "Mostrar contenido mixto" cambió a Habilitar y la selección está deshabilitada porque está anulada por Política. Para la lista completa de las políticas apoyadas descargar WindowsServer2012andWindows8GroupPolicySettings.xlsx de http://www.microsoft.com/en-us/download/details.aspx?id=25250
Ahora, de vuelta a la pregunta de cómo cambiar la configuración mediante programación. EricLaw sugirió correctamente el uso de SetZoneActionPolicy desde IInternetZoneManager. Pero es difícil encontrar muestras para llamarlo desde C#. terminé de copiar http://www.pinvoke.net/default.aspx/Interfaces.IInternetZoneManager en mi código y luego hacer:
//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);
También intentado cambiar la política del grupo mediante programación. que utiliza la biblioteca de https://bitbucket.org/MartinEden/local-policy y luego:
//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();
Después de probar con éxito el código anterior en SP1 Win7 con IE 11 decidí volver a la sugerencia original de EricLaw: modificar HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones \ * \ 1001 directamente porque esto es lo que Microsoft recomienda. Consulte, por ejemplo, How to strengthen the security settings for the Local Machine zone in Internet Explorer o Enhanced Browsing Security
¿Quiere decir, desde dentro de una aplicación C# de confianza instalada localmente que tiene derechos de administrador? –
Sí. aplicación local de confianza que se ejecuta con privilegios de administrador – kakopappa
Y, por supuesto, esto sería un "cambio temporal" ... que SIEMPRE se deshace una vez que se ha cumplido su propósito? No iría a "ajustar" la configuración del navegador de los usuarios, especialmente a las de seguridad, sin el consentimiento informado de los usuarios. – corlettk