.NETアプリケーションの現在/アクティブなセキュリティゾーンを取得しますか?

StackOverflow https://stackoverflow.com/questions/239463

質問

おかしな動作をするアプリケーションがありますが、確認するために、現在実行しているセキュリティゾーンを確認します。

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;
                }
            }
        }
    }
}
役に立ちましたか?

解決

現在のアセンブリのCAS証拠を確認する必要があります。

this.GetType()。Assembly.Evidence

Assembly.Evidence はプロパティです証拠オブジェクト。これから、証拠を列挙して、 <!> lt; System.Security.Policy.Zone <!> gt;として表示されるゾーン要素。

他のヒント

.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 <!>#246; rgy

使用することもできます

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

の代わりに

this.GetType().Assembly.Evidence
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top