문제

이상하게 행동하는 응용 프로그램이 있으며, 확인하기 위해 현재 어떤 보안 영역을 실행하고 있는지 확인하고 싶습니다.

System.security.securityzone enum을 찾았지만이 중 어느 쪽을 실행하고 있는지 찾을 수없는 것 같습니다.

팁이 있습니까?

기본적으로 내 응용 프로그램이 MyComputer, Intranet, 인터넷, 신뢰할 수없는, 신뢰할 수없는 등에서 실행 중인지 알고 싶습니다.


편집하다: 이 코드를 찾기 위해 쓴 작은 테스트 앱은 다음과 같습니다. @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;
                }
            }
        }
    }
}
도움이 되었습니까?

해결책

현재 어셈블리에 대한 CAS 증거를 살펴 봐야합니다.

this.getType (). 어셈블리

조립. 증거 재산입니다 증거 물체. 이것으로부터 당신은 할 수 있습니다 증거를 열거하십시오 그리고 a로 나타나는 영역을 찾으십시오u003CSystem.Security.Policy.Zone> 요소.

다른 팁

.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 기본 클래스.

HTH, György

당신은 또한 사용할 수 있습니다

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

대신에

this.GetType().Assembly.Evidence
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top