2016-06-06 3 views
0

Wie kann ich die Sicherheitseinstellung einer geladenen Assembly zur Laufzeit mit C# .NET 2.0 (VS 2005) überprüfen? Ich lade die Baugruppe mit:Anfordern der CAS-Sicherheitseinstellungen für eine Assembly zur Laufzeit - C# .NET 2.0

Assembly externalAssembly = Assembly.LoadFrom (Pfad);

Möglicherweise ist der Pfad lokal oder es ist ein Remote-UNC-Pfad (Netzwerkpfad).

Wenn es sich um einen Remote-Netzwerkpfad handelt, sollte der Benutzer den CAS mit "caspol.exe" auf "fulltrust" setzen, um die Anwendung ordnungsgemäß auszuführen. Wie kann ich dies zur Laufzeit überprüfen, wenn CAS richtig konfiguriert wurde?

Ich habe gesehen, .NET 4.0 bietet eine "IsFullyTrusted" -Eigenschaft für diesen Zweck.

Leider muss ich noch VS 2005 für mein Projekt verwenden.

Grüße Tom

Antwort

0

Nachdem ich einige Hausaufgaben gemacht und gruben sich in Code Access Security ein wenig, ich hoffe, ich habe bisher eine Lösung für mich gefunden. Ich brauche nur zwei Zeilen Code:

Assembly externalAssembly = Assembly.LoadFrom(path); 

// Retrieve the permission set of the external assembly 
PermissionSet permSet = SecurityManager.ResolvePolicy(externalAssembly.Evidence); 
if(!permSet.IsUnrestricted()) 
{ 
    throw new Exception("Assembly is not fully trusted!"); 
} 

Wenn die Assembly die uneingeschränkte Erlaubnis hat, IsUnrestricted() gibt true zurück, und die Sammlung von Berechtigungen in permSet ist leer.

Wenn es beschränkt ist, wird false zurückgegeben, und das permSet listet die Berechtigungen auf, die der Assembly von der .NET-Richtlinienauflösung zugewiesen wurden.

Hoffnung hilft dies jemand in Zukunft

Tom

0

Versuchen Sie folgendes:

public static bool IsFullyTrusted() 
{ 
    try 
    { 
     new PermissionSet(PermissionState.Unrestricted).Demand(); 
     return true; 
    } 
    catch (SecurityException) 
    { 
     return false; 
    } 
} 
+0

ich nicht sehen kann, ob dies eine Lösung für mich ist: Ich denke, mit diesem Code kann ich überprüfen, ob meine eigenen Code, tatsächlich ausgeführt wird, ist voll vertrauenswürdig. Aber ich muss überprüfen, ob das externe Assembly, das ich gerade geladen habe, vollständig vertrauenswürdig ist. Möglicherweise wurde es über eine Netzwerkfreigabe geladen, die nicht vollständig vertrauenswürdig ist und nur über niedrigere Intranet-Rechte verfügt. –

Verwandte Themen