获取.NET应用程序的当前/活动安全区域?

我有一个行为奇怪的应用程序,只是为了validation,我想看看它当前正在运行的安全区域。

我找到了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; } } } } } 

您需要查看当前assembly的CAS证据;

this.GetType()。Assembly.Evidence

Assembly.Evidence是一个属性Evidence对象。 从中可以枚举证据并查找显示为元素的区域。

在.NET 3.5中,您可以使用LINQ简化代码:

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

从.NET 4.0开始,您可以使用方便的GetHostEvidence方法:

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

请注意,从.NET 4.0开始,证据类派生自EvidenceBase基类。

HTH,György

你也可以使用

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

代替

 this.GetType().Assembly.Evidence