الحصول على الحالية/نشط المنطقة الأمنية من .صافي التطبيق ؟
-
04-07-2019 - |
سؤال
لدي طلب أن يتصرف بشكل غريب, و فقط للتحقق ، أود أن أرى أي المنطقة الأمنية تعمل حاليا تحت.
لقد وجد النظام.الأمن.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