Ottieni la zona di sicurezza corrente / attiva di un'applicazione .NET?
-
04-07-2019 - |
Domanda
Ho un'applicazione che si comporta in modo strano e, solo per verificare, mi piacerebbe vedere in quale zona di sicurezza è attualmente in esecuzione.
Ho trovato l'enumerazione System.Security.SecurityZone, ma non riesco a trovare nulla che possa restituire con quale di questi sto eseguendo.
Qualcuno ha qualche consiglio?
Fondamentalmente voglio scoprire se la mia applicazione è in esecuzione in MyComputer, Intranet, Internet, Untrusted, Trusted, ecc.
Modifica: Ecco l'app di test minore che ho scritto per trovare questo codice, grazie 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;
}
}
}
}
}
Soluzione
È necessario esaminare le prove CAS per l'assemblea corrente;
this.GetType (). Assembly.Evidence
Assembly.Evidence è una proprietà Evidence . Da questo puoi enumerare le prove e cercare il zona che appare come < System.Security.Policy.Zone > elemento.
Altri suggerimenti
In .NET 3.5 è possibile semplificare il codice con LINQ:
Zone z = a.Evidence.OfType<Zone>().First();
Da .NET 4.0 hai un comodo metodo GetHostEvidence
:
Zone z = Assembly.GetExecutingAssembly().Evidence.GetHostEvidence<Zone>();
Si noti che da .NET 4.0 le classi di prove derivano dalla EvidenceBase
classe base.
HTH, Gy # 246 &; Rgy
Puoi anche usare
Evidence e = Thread.CurrentThread.GetType().Assembly.Evidence;
anziché
this.GetType().Assembly.Evidence