2012-06-06 7 views
7

Ich versuche, eine Sandbox-App-Domäne zu erstellen. Um dies zu erreichen, verwende ich die AppDomain.CreateDomain, die den Pfad zu der DLL sandboxed geben..net 4 teilweise vertrauen eine Assembly von GAC

Allerdings habe ich festgestellt, dass, wenn diese DLL in der GAC ist, dann die DLL vollständig vertrauenswürdig ist, wenn also dort eine PermissionSet.Assert sein wird, kann es uneingeschränkten Zugriff erhalten.

Also, ich frage mich, ob es einen Weg gibt, um entweder

  1. Kraft die DLL aus dem Weg zu laden, und nicht aus dem GAC, so wird es teilweise vertrauenswürdig sein.
  2. oder - markieren Sie eine bestimmte DLL in der GAC als teilweise vertrauenswürdig.

Vielen Dank!

Antwort

1

Wenn beide Baugruppen vollständig signiert sind, wird die CLR die im GAC verwenden. Wenn Sie die Eins im Zielpfad unsigniert belassen, verwendet die CLR stattdessen diese.

Wenn dies keine Option ist, müssen Sie einen der CreateDomain-Overrides verwenden, in dem Sie den Berechtigungssatz definieren können, den die Assembly benötigt. Weitere Informationen zum Override finden Sie hier: http://msdn.microsoft.com/en-us/library/ms130766.aspx.

Ein Beispiel für die Nutzung als von http://davedewinter.com/2009/05/22/how-to-host-a-partial-trust-sandbox/ genommen ...

static void RunInPartialTrust() 
{ 
    AppDomainSetup setup = new AppDomainSetup 
    { 
     ApplicationBase = Environment.CurrentDirectory 
    }; 

    PermissionSet permissions = new PermissionSet(null); 
    permissions.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution)); 
    permissions.AddPermission(new ReflectionPermission(ReflectionPermissionFlag.RestrictedMemberAccess)); 
    AppDomain appDomain = AppDomain.CreateDomain(
     "Partial Trust AppDomain", 
     null, 
     setup, 
     permissions 
    ); 

    Program p = (Program)appDomain.CreateInstanceAndUnwrap(
     typeof(Program).Assembly.FullName, 
     typeof(Program).FullName 
    ); 

    p.PartialTrustMain(); 
} 
+0

Die davewinter (http://davedewinter.com/2009/05/22/how-to-host-a-partial-trust Der Link -sandbox /) ist nicht mehr zugänglich. Gibt es einen Spiegel für die Verbindung? – Oli4