2008-10-27 15 views
6

Garip davranan bir uygulama var ve sadece doğrulamak için hangi güvenlik bölgesinin altında çalıştığını görmek istiyorum.Bir .NET uygulamasının geçerli/aktif güvenlik bölgesini aldınız mı?

System.Security.SecurityZone enum dosyasını buldum, fakat bunlardan hangisini çalıştırdığımı gösteren bir şey bulamıyorum.

Herhangi bir ipucu var mı?

Temelde benim uygulama vb Güvenilir, Güvenilmeyen mycomputer, Intranet, Internet, çalışan olup olmadığını öğrenmek isteyen


Düzenleme: İşte bu bulmak için yazdığı küçük test uygulaması var Kod, @blowdart'a teşekkürler.

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; 
       } 
      } 
     } 
    } 
} 

cevap

6

Geçerli derleme için CAS kanıtlarına bakmanız gerekir;

this.GetType(). Assembly.Evidence

Assembly.Evidence bir özellik Evidence amacıdır. Buradan enumerate the evidence numaralı telefonu inceleyebilir ve <System.Security.Policy.Zone> öğesi olarak görünen bölgeyi arayabilirsiniz.

+0

hoşluk, teşekkürler, ben ileride yararlanmak üzere burada nihai kodu yapıştırın edeceğiz. –

+0

Rica ederim. Tabii ki gerçek hayatta bunu yapmak zorunda kalmayacaksınız, CAS taleplerini yerine getirecek ve ona göre davranacaksınız :) – blowdart

-2

Ayrıca

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

yerine

this.GetType().Assembly.Evidence 
+1

'Thread.CurrentThread.GetType()', 'Type' örneğini' typeof (Thread) olarak döndürür Yani, geliştiricinin montajına değil, 'Thread' sınıfının meclisi (' mscorlib') için kanıtlar alıyorsunuz. – BACON

3

.NET 3.5 size LINQ ile kod kolaylaştırabilirsiniz kullanabilirsiniz:

Zone z = a.Evidence.OfType<Zone>().First(); 

.NET 4.0 itibaren bir var uygun GetHostEvidence yöntem:

Zone z = Assembly.GetExecutingAssembly().Evidence.GetHostEvidence<Zone>(); 

.NET 4.0 kanıt sınıflarından, EvidenceBase taban sınıfından türetildiğini unutmayın.

HTH, György

İlgili konular