Получить текущую / активную зону безопасности приложения .NET? - PullRequest
6 голосов
/ 27 октября 2008

У меня есть приложение, которое ведет себя странно, и просто для проверки я хотел бы увидеть, в какой зоне безопасности оно в данный момент работает.

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

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

В основном я хочу узнать, запущено ли мое приложение в MyComputer, Intranet, Internet, Untrusted, Trusted и т. Д.


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

Ответы [ 3 ]

6 голосов
/ 27 октября 2008

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

this.GetType (). Assembly.Evidence

Assembly.Evidence является свойством Evidence объекта. Отсюда вы можете перечислить доказательства и найти зону, которая отображается как элемент .

3 голосов
/ 06 октября 2013

В .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 базового класса.

НТН, Дьёрдь

0 голосов
/ 23 ноября 2012

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

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

вместо

this.GetType().Assembly.Evidence
...