簡體   English   中英

獲取.NET應用程序的當前/活動安全區域?

[英]Get current/active security zone of a .NET application?

我有一個行為奇怪的應用程序,只是為了驗證,我想看看它當前正在運行的安全區域。

我找到了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是一個屬性Evidence對象。 從中可以枚舉證據並查找顯示為<System.Security.Policy.Zone>元素的區域。

在.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örgy

你也可以使用

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

代替

this.GetType().Assembly.Evidence

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM