Pergunta

Eu tenho um aplicativo que se comporta estranhamente, e apenas para verificar, eu gostaria de ver qual zona de segurança que está atualmente em execução.

Eu encontrei o enum System.Security.SecurityZone, mas não consigo encontrar nada que irá retornar qual destes eu estou correndo abaixo.

Alguém tem alguma dica?

Basicamente eu quero saber se a minha aplicação está em execução em MyComputer, Intranet, Internet, não confiável, confiável, etc.


Editar: Aqui está o menor test-app que eu escrevi para encontrar este código, graças 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;
                }
            }
        }
    }
}
Foi útil?

Solução

Você precisa olhar para as provas CAS para a montagem atual;

this.GetType (). Assembly.Evidence

Assembly.Evidence é uma propriedade Evidence objeto . A partir desta você pode enumerar os evidências e olhar para o zona que aparece como um elemento.

Outras dicas

Em NET 3.5 você pode simplificar o código com LINQ:

Zone z = a.Evidence.OfType<Zone>().First();

De .NET 4.0 você tem um método GetHostEvidence conveniente:

Zone z = Assembly.GetExecutingAssembly().Evidence.GetHostEvidence<Zone>();

Note que a partir de .NET classes de 4.0 evidências derivam da classe base EvidenceBase.

HTH, György

Você também pode usar

Evidence e = Thread.CurrentThread.GetType().Assembly.Evidence;

em vez de

this.GetType().Assembly.Evidence
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top