Я пытался построить архитектуру AddIn и использовал MAF. Основы, которым я следовал, даны здесь, в документах Майкрософт
Краткая справка о приложении:
При загрузке надстроек основной код хоста:
string appPath = Environment.CurrentDirectory + "\\Pipeline";
string[] warnings = AddInStore.Rebuild(appPath);
if (warnings.Length > 0)
{
string msg = "Could not rebuild pipeline:";
foreach (string warning in warnings) msg += "\n" + warning;
MessageBox.Show(msg);
return;
}
Collection<AddInToken> addInTokens = AddInStore.FindAddIns(typeof(IWPFAddInHostView), appPath);
AddInToken wpfAddInToken = addInTokens[0];
// the only line I can see that has something to do with
// security permissions
this._wpfAddInHostView = wpfAddInToken.Activate<IWPFAddInHostView>(AddInSecurityLevel.Internet);
FrameworkElement addInUI = this._wpfAddInHostView.GetAddInUI();
this.addInUIHostGrid.Children.Add(addInUI);
Этот код работает нормально (загружает надстройку и при нажатии кнопки в пользовательском интерфейсе надстройки появляется окно ожидаемого сообщения), когда я запускаю его, но в режиме отладки он дает следующее исключение и вылетает (он загружает надстройку правильно, но при нажатии кнопки исключение происходит), я отметил единственную строку, имеющую отношение к разрешениям безопасности выше, не уверен, почему это должно происходить только в режиме отладки и даже почему это происходит.
Кроме того, я не знаю 2 вопросов в вопросе, но я не видел, чтобы многие люди использовали MAF, а на странице продукта написано, что нет активной поддержки, интересно, делаю ли я неправильный выбор.
System.Security.SecurityException HResult=0x8013150A
Message=Request for the permission of type 'System.Security.Permissions.UIPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
Source= StackTrace:
это работает на моем ноутбуке с разрешения администратора, я отредактирую вопрос, чтобы дать предысторию .... спасибо, что указали, что я пропустил ключевой бит.
Изменение разрешения безопасности
this._wpfAddInHostView = wpfAddInToken.Activate<IWPFAddInHostView>(AddInSecurityLevel.Internet);
на полное доверие работает.
this._wpfAddInHostView = wpfAddInToken.Activate<IWPFAddInHostView>(AddInSecurityLevel.FullTrust);
Таким образом, очевидно, что это связано с уровнем безопасности в Интернете и будет частичным доверием. Но мне все еще любопытно, почему это исключение возникает только тогда, когда я запускаю систему в режиме отладки?
Может быть, часть, вызывающая исключение, находится в мертвом коде? Обнаружение мертвого кода JiT работает по-разному в сборках Debug и Release. И даже между сборками или исполнениями x32 и x64. У него достаточно приоритета, чтобы найти этот код в одном случае, но не в другом.
На каких правах это выполняется? По умолчанию службы Windows (и все, что работает как единое целое, например, веб-серверы) каким-либо образом заблокированы от доступа к рабочему столу. Они работают в «неинтерактивных сеансах». Хотя я понятия не имею, что именно вы здесь делаете, это немного пахнет проблемой InteractiveSession.