【发布时间】:2012-05-18 18:38:31
【问题描述】:
我想构建一个 WPF 系统,该系统可以包含由外部开发人员社区开发的插件。由于我不能为这些开发人员担保,我希望他们的代码在安全的环境中运行。 看来 MAF 是一个很好的解决方案,所以我决定调查一下 MAF 的安全性。 可以为每个插件定义一个精确的权限集,非常棒。
但是,我希望插件能够返回 WPF 控件。为此,他们需要能够运行 WPF 程序集。另外,我不希望插件能够运行非托管代码,这样它们就不能覆盖我在加载插件时设置的安全权限。
所以问题来了 - 如果我在未经许可的情况下加载插件以运行非托管代码,那么插件将无法创建 WPF 控件。我该如何解决这个问题?
为了进一步测试这个问题,我编写了一个小型 WPF 应用程序,并尝试加载它并从第二个应用程序运行它。 Bellow 是加载和运行 WPF 应用程序的代码。如果按原样效果很好,但如果我删除最后一个 AddPermission 语句(带有 UnmanageCode 标志的语句),它就会停止工作,说它无法创建 WPF 应用程序的窗口。
PermissionSet set = new PermissionSet(PermissionState.None);
set.AddPermission(new FileIOPermission(FileIOPermissionAccess.AllAccess, PATH));
set.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
set.AddPermission(new UIPermission(PermissionState.Unrestricted));
set.AddPermission(new SecurityPermission(SecurityPermissionFlag.UnmanagedCode));
Evidence ev = new Evidence();
AppDomain domain = AppDomain.CreateDomain("Test", ev, new AppDomainSetup() { ApplicationBase = PATH }, set);
domain.ExecuteAssembly(PATH);
【问题讨论】:
标签: .net wpf appdomain add-on maf