Я хочу создать систему WPF, которая может включать addin, разработанную внешним сообществом разработчиков. Поскольку я не могу ручаться за тех разработчиков, я хочу, чтобы их код работал в безопасной среде. Кажется, что MAF - хорошее решение, поэтому я решил исследовать безопасность MAF. Можно определить точное разрешение для каждого аддона, что очень приятно.Безопасность и дополнения MAF
Однако я хочу, чтобы AddOns могли возвращать элементы управления 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);