是否可以将多个程序集加载到新的AppDomain中并对每个程序集应用不同的PermissionSet
?
比如说,允许其中一个程序集写入磁盘,方法是将其授予不受限制的FileIOPermission
,并拒绝向其他程序授予此类权限。
如果有可能的话。怎么样?
P.S。我正在创建DLL的类型实例,而不是执行exes,所以我使用的是Load
和CreateInstanceAndUnwrap
而不是ExecuteAssembly
。
我尝试(并且失败)使用以下代码提供带有load方法的证据:
Dim domain As AppDomain = AppDomain.CreateDomain("AssembliesDomain")
Dim protectedSet As New PermissionSet(PermissionState.None)
protectedSet.AddPermission(New SecurityPermission(SecurityPermissionFlag.Execution))
protectedSet.AddPermission(New IsolatedStorageFilePermission(PermissionState.Unrestricted))
protectedSet.PermitOnly()
domain.Load(protectedAssembly, New Evidence(Nothing, {protectedSet}))
domain.Load(unprotectedAssembly, New Evidence(Nothing, {protectedSet}))
Console.WriteLine(domain.CreateInstanceAndUnwrap(protectedAssembly, protectedAssembly & ".Actions").Sum(1, 2))
Console.WriteLine(domain.CreateInstanceAndUnwrap(unprotectedAssembly, unprotectedAssembly & ".Actions").Sum(1, 2))
Console.ReadLine()
答案 0 :(得分:1)
添加此行(以解决您获得的异常):
protectedSet.AddPermission(new UIPermission(PermissionState.Unrestricted));
有用的文章:http://www.reliablesoftware.com/articles/UnderstandingSecurityActions.html
答案 1 :(得分:0)
您可以在使用Assembly.Load方法实例化其中一个自定义程序集时指定自定义Evidence对象,或者查看here