获取.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;
                }
            }
        }
    }
}

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

您需要查看当前程序集的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