¿Obtener la zona de seguridad actual / activa de una aplicación .NET?
-
04-07-2019 - |
Pregunta
Tengo una aplicación que se comporta de manera extraña, y solo para verificar, me gustaría ver en qué zona de seguridad se está ejecutando actualmente.
He encontrado la enumeración System.Security.SecurityZone, pero parece que no puedo encontrar nada que devuelva con cuál de estos estoy ejecutando.
¿Alguien tiene algún consejo?
Básicamente quiero saber si mi aplicación se está ejecutando en MyComputer, Intranet, Internet, No confiable, Trusted, etc.
Editar: Aquí está la aplicación de prueba menor que escribí para encontrar este código, gracias a @blowdart .
using System;
using System.Reflection;
namespace zone_check
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(".NET version: " + Environment.Version);
foreach (Object ev in Assembly.GetExecutingAssembly().Evidence)
{
if (ev is System.Security.Policy.Zone)
{
System.Security.Policy.Zone zone = (System.Security.Policy.Zone)ev;
Console.WriteLine("Security zone: " + zone.SecurityZone);
break;
}
}
}
}
}
Solución
Debe mirar la evidencia de CAS para la asamblea actual;
this.GetType (). Assembly.Evidence
Assembly.Evidence es una propiedad Evidencia objeto. A partir de esto, puede enumerar la evidencia y buscar el zona que aparece como < System.Security.Policy.Zone > elemento.
Otros consejos
En .NET 3.5 puede simplificar el código con LINQ:
Zone z = a.Evidence.OfType<Zone>().First();
Desde .NET 4.0 tiene un método GetHostEvidence
conveniente:
Zone z = Assembly.GetExecutingAssembly().Evidence.GetHostEvidence<Zone>();
Tenga en cuenta que de .NET 4.0 las clases de evidencia derivan de la EvidenceBase
clase base.
HTH, Gy & # 246; rgy
También puedes usar
Evidence e = Thread.CurrentThread.GetType().Assembly.Evidence;
en lugar de
this.GetType().Assembly.Evidence