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

时间:2008-10-27 09:57:29

标签: c# .net security cas security-zone

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

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

3 个答案:

答案 0 :(得分:6)

您需要查看当前程序集的CAS证据;

this.GetType()。Assembly.Evidence

Assembly.Evidence是属性Evidence对象。从这里你可以enumerate the evidence并查找显示为< System.Security.Policy.Zone>的区域。元件。

答案 1 :(得分:3)

在.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, 捷尔吉

答案 2 :(得分:-2)

您也可以使用

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

而不是

this.GetType().Assembly.Evidence