2008-10-27 74 views
6

我有一個行爲奇怪的應用程序,只是爲了驗證,我想看看它當前正在運行的安全區域。獲取.NET應用程序的當前/活動安全區域?

我發現System.Security.SecurityZone枚舉,但似乎無法找到任何將返回這些我正在運行下面的。

有沒有人有任何提示?

基本上我想看看我的應用程序在我的電腦,內聯網,互聯網,不可信的運行,可信等


編輯:這裏是次要的測試程序,我寫了找到這個代碼,感謝@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基類。

HTH, 捷爾吉