【发布时间】:2011-08-06 22:04:29
【问题描述】:
是否可以将多个程序集加载到一个新的 AppDomain 并为每个程序集应用不同的PermissionSet?
比如说,允许其中一个程序集写入磁盘,方法是授予它不受限制的 FileIOPermission 并拒绝其他程序集的此类权限。
如果可能的话。怎么样?
更新
附:我正在创建 DLL 未执行 exe 的类型实例,因此我使用 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()
【问题讨论】:
-
您拥有的代码似乎是正确的。您是否使用 ClickOnce 部署?您需要在项目设置中指定“这是一个完全信任的应用程序”。
-
ClickOnce 不是 asp 吗?这是一个桌面应用程序。
-
ClickOnce 是一种部署技术,可帮助您通过单击页面上的超链接来部署 Windows 窗体应用程序或 WPF 应用程序:en.wikipedia.org/wiki/ClickOnce。如果您没有使用 ClickOnce,那么您也许可以使用PermView 工具来检查您的应用程序拥有哪些权限。我相信您需要将
UIPermission授予您的程序集(您也可以通过AssemblyInfo.cs文件来完成)。 -
@Mrchief 我今晚会进入它:)
-
也尝试添加这一行:
protectedSet.AddPermission(new UIPermission(PermissionState.Unrestricted));