6

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

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

3 回答 3

6

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

this.GetType().Assembly.Evidence

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

于 2008-10-27T10:04:23.100 回答
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, 捷尔吉

于 2013-10-06T05:17:16.987 回答
-2

你也可以使用

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

代替

this.GetType().Assembly.Evidence
于 2012-11-23T16:00:38.777 回答