Obtenir la zone de sécurité actuelle / active d’une application .NET?
-
04-07-2019 - |
Question
J'ai une application qui se comporte bizarrement et, pour vérifier, j'aimerais voir dans quelle zone de sécurité elle s'exécute actuellement.
J'ai trouvé l'énumération System.Security.SecurityZone, mais je n'arrive pas à trouver quoi que ce soit qui retourne lequel de ces éléments est exécuté.
Quelqu'un a-t-il des conseils?
En gros, je veux savoir si mon application tourne dans MyComputer, Intranet, Internet, Untrusted, Trusted, etc.
Modifier: Voici la petite application de test que j'ai écrite pour trouver ce code, grâce à @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;
}
}
}
}
}
La solution
Vous devez examiner les preuves CAS pour l'assemblage actuel;
this.GetType (). Assembly.Evidence
Assembly.Evidence est une propriété. objet Evidence . À partir de cela, vous pouvez énumérer les preuves et rechercher les zone qui apparaît en tant que < System.Security.Policy.Zone > élément.
Autres conseils
Dans .NET 3.5, vous pouvez simplifier le code avec LINQ:
Zone z = a.Evidence.OfType<Zone>().First();
À partir de .NET 4.0, vous disposez d'une GetHostEvidence
méthode pratique:
Zone z = Assembly.GetExecutingAssembly().Evidence.GetHostEvidence<Zone>();
Notez que les classes de preuves .NET 4.0 dérivent de la EvidenceBase
classe de base.
HTH, Gy & # 246; rgy
Vous pouvez également utiliser
Evidence e = Thread.CurrentThread.GetType().Assembly.Evidence;
au lieu de
this.GetType().Assembly.Evidence