获取.NET应用程序的当前/活动安全区域
本文关键字:活动 安全 安全区 区域 NET 应用程序 获取 | 更新日期: 2023-09-27 17:48:54
我有一个行为异常的应用程序,为了验证,我想看看它当前在哪个安全区域下运行。
我找到了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;
}
}
}
}
}
您需要查看当前程序集的CAS证据;
this.GetType().Assembly.Evidence
集合。证据是一种财产证据对象。由此,您可以列举证据并查找显示为<系统.安全.策略.区域>要素
在.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