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>();

EvidenceBase.NET 4.0 以降、証拠クラスは基本クラスから派生することに注意してください。

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 に答える