2008-10-27 7 views
6

मेरे पास एक ऐसा एप्लिकेशन है जो अजीब तरीके से व्यवहार करता है, और केवल सत्यापित करने के लिए, मैं देखना चाहता हूं कि वर्तमान में कौन सा सुरक्षा क्षेत्र चल रहा है।एक .NET आवेदन के वर्तमान/सक्रिय सुरक्षा क्षेत्र प्राप्त करें?

मुझे सिस्टम मिला है। सुरक्षा। सुरक्षा ज़ोन एनम, लेकिन ऐसा कुछ भी नहीं मिल रहा है जो मैं वापस करूँगा जो मैं नीचे चला रहा हूं।

क्या किसी के पास कोई सुझाव है?

मूल रूप से मैं पता लगाने के लिए अगर अपने आवेदन आदि MyComputer, इंट्रानेट, इंटरनेट, अविश्वसनीय में चल रहा है, विश्वसनीय, चाहते


संपादित करें: यहाँ नाबालिग परीक्षण एप्लिकेशन मैं इस लगाने के लिए लिखा है कोड, @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; 
       } 
      } 
     } 
    } 
} 

उत्तर

6

आपको वर्तमान असेंबली के लिए सीएएस सबूत देखने की जरूरत है;

this.GetType()। Assembly.Evidence

Assembly.Evidence एक संपत्ति Evidence वस्तु है। इससे आप enumerate the evidence देख सकते हैं और < सिस्टम के रूप में दिखाई देने वाले क्षेत्र की तलाश कर सकते हैं। सुरक्षा। पॉलिसीज़। ज़ोन > तत्व।

+0

सुंदरता, धन्यवाद, मैं अंतिम कोड यहां भविष्य में संदर्भ के लिए पेस्ट करना होगा। –

+0

आपका स्वागत है। बेशक वास्तविक जीवन में आपको ऐसा करने की ज़रूरत नहीं है, आप सीएएस की मांग कर रहे होंगे और तदनुसार अभिनय करेंगे :) – blowdart

-2

तुम भी

Evidence e = Thread.CurrentThread.GetType().Assembly.Evidence; 
बजाय

this.GetType().Assembly.Evidence 
+1

'थ्रेड। कंटेंट थ्रेड.गेट टाइप() 'वही' टाइप 'उदाहरण' टाइपफ (थ्रेड) 'के रूप में देता है। , इसलिए आप 'थ्रेड' वर्ग की असेंबली ('mscorlib') के लिए सबूत पुनर्प्राप्त कर रहे हैं, डेवलपर की असेंबली नहीं। – BACON

3

.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

संबंधित मुद्दे