2012-06-06 41 views
7

我正在尝试创建一个沙盒应用程序域。为了达到这个目的,我使用了AppDomain.CreateDomain,给出了要被沙箱化的DLL的路径。.net 4部分信任来自GAC的程序集

但是,我注意到如果该DLL在GAC中,那么该DLL是完全可信的,因此如果在那里将有一个PermissionSet.Assert,它可以接收不受限制的访问。

所以,我在想,如果有一种方法要么

  1. 力的DLL从路径加载,而不是从GAC,因此这将是局部的信任。
  2. 或 - 将GAC中的某个DLL标记为部分可信。

谢谢!

回答

1

如果两个程序集都完全签名,那么CLR将使用GAC中的程序集。如果您将目标路径中的路径保留为无符号,那么CLR将使用该路径。

如果这不是一个选项,那么您需要使用其中一个CreateDomain覆盖,您可以在其中定义该程序集将需要的权限集。有关覆盖的更多信息可以在这里找到:http://msdn.microsoft.com/en-us/library/ms130766.aspx

http://davedewinter.com/2009/05/22/how-to-host-a-partial-trust-sandbox/截取的用法的例子...

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

的davewinter(http://davedewinter.com/2009/05/22/how-to-host-a-partial-trust -sandbox /)链接不再可访问。有链接的镜像吗? – Oli4

相关问题