.NETアプリケーションの現在/アクティブなセキュリティゾーンを取得しますか?
-
04-07-2019 - |
質問
おかしな動作をするアプリケーションがありますが、確認するために、現在実行しているセキュリティゾーンを確認します。
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
所属していません StackOverflow