2008-10-27 6 views
6

У меня есть приложение, которое ведет себя странно, и просто для проверки, я хотел бы видеть, в какой зоне безопасности он работает в настоящее время.Получить текущую/активную зону безопасности приложения .NET?

Я нашел перечисление System.Security.SecurityZone, но не может найти ничего, что вернет, из какого из них я запущен.

Есть ли у кого-нибудь советы?

В основном я хочу узнать, если мое приложение работает в MyComputer, Интранет, Интернет, Подозрительные, доверенный и т.д.


Edit: Вот второстепенный тест-приложение, которое я написал, чтобы найти это код, благодаря @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; 
       } 
      } 
     } 
    } 
} 

ответ

6

Вам необходимо посмотреть доказательства CAS для текущей сборки;

this.GetType(). Assembly.Evidence

Assembly.Evidence является свойством Evidence объекта. Из этого вы можете enumerate the evidence ищите зону, которая отображается как <System.Security.Policy.Zone> элемент.

+0

любезность, спасибо, я буду вставлять окончательный код здесь для справки. – 2008-10-27 10:08:41

+0

Добро пожаловать. Конечно, в реальной жизни вам не придется этого делать, вы должны делать требования CAS и действовать соответственно :) – blowdart 2008-10-27 10:29:00

-2

Вы также можете использовать

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

вместо

this.GetType().Assembly.Evidence 
3

В .NET 3.5 вы можете упростить код с LINQ:

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

С .NET 4.0 у вас есть удобный GetHostEvidence способ:

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

Обратите внимание, что из классов доказательств .NET 4.0 получают базовый класс EvidenceBase.

НТН, Дьёрдь

 Смежные вопросы

  • Нет связанных вопросов^_^