外部開発者コミュニティが開発したアドインを組み込むことができるWPFシステムを構築したい。私はそれらの開発者を保証できないので、彼らのコードが安全な環境で実行されることを望んでいます。MAF は良い解決策だと思われるので、MAF のセキュリティを調査することにしました。アドオンごとに正確な権限セットを定義できます。これは非常に優れています。
ただし、アドオンが WPF コントロールを返せるようにしたいと考えています。そのためには、WPF アセンブリを実行できる必要があります。さらに、アドオンをロードするときに設定したセキュリティ権限をオーバーライドできないように、アドオンがアンマネージ コードを実行できるようにしたくありません。
ここに問題があります。アンマネージ コードを実行する権限なしでアドオンをロードすると、アドオンは WPF コントロールを作成できなくなります。どうすればこの問題を解決できますか?
この問題をもう少しテストするために、小さな WPF アプリを作成し、それを読み込んで別のアプリから実行しようとしました。以下は、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);