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;
                }
            }
        }
    }
}
È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top