الحصول على الحالية/نشط المنطقة الأمنية من .صافي التطبيق ؟

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

سؤال

لدي طلب أن يتصرف بشكل غريب, و فقط للتحقق ، أود أن أرى أي المنطقة الأمنية تعمل حاليا تحت.

لقد وجد النظام.الأمن.SecurityZone التعداد ، ولكن لا يمكن أن يبدو للعثور على أي شيء من شأنها أن عودة أي من هذه أنا على التوالي تحت.

هل من أحد لديه أي نصائح ؟

في الأساس كنت ترغب في معرفة ما إذا كان بلدي التطبيق قيد التشغيل في جهاز الكمبيوتر, الإنترنت, موثوق بها, ثقة, الخ.


تحرير: هنا طفيفة اختبار التطبيق كتبت العثور على هذا الرمز ، وذلك بفضل @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 الأدلة الحالية ؛

هذا.GetType().الجمعية.الأدلة

الجمعية.الأدلة هي خاصية الأدلة الكائن.من هذا يمكنك تعداد الأدلة والبحث عن المنطقة التي يظهر <System.Security.Policy.Zone> العنصر.

نصائح أخرى

في .NET framework 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, جيورجي

يمكنك أيضا استخدام

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

بدلا من

this.GetType().Assembly.Evidence
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top