[英]Get current/active security zone of a .NET application?
我有一個行為奇怪的應用程序,只是為了驗證,我想看看它當前正在運行的安全區域。
我找到了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;
}
}
}
}
}
您需要查看當前程序集的CAS證據;
this.GetType()。Assembly.Evidence
Assembly.Evidence是一個屬性Evidence對象。 從中可以枚舉證據並查找顯示為<System.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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.