我正在尝试创建一个沙盒应用程序域。为实现这一点,我使用AppDomain.CreateDomain
,将DLL的路径设置为沙箱。
但是,我注意到如果该DLL在GAC中,那么DLL是完全可信的,因此如果那里有PermissionSet.Assert
,它可以接收不受限制的访问。
所以,我想知道是否有办法
谢谢!
答案 0 :(得分: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();
}