获取.NET应用程序的当前/活动安全区域?
-
04-07-2019 - |
题
我的应用程序行为奇怪,只是为了验证,我想看看它当前正在运行哪个安全区域。
我找到了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 是一处房产证据对象。从这里你可以枚举证据并寻找区域显示为<!> lt; System.Security.Policy.Zone <!> gt;元件。
其他提示
在.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, 戈瑞#246 <!>; RGY
您也可以使用
Evidence e = Thread.CurrentThread.GetType().Assembly.Evidence;
而不是
this.GetType().Assembly.Evidence
不隶属于 StackOverflow