Отладка TrustNotGrantedException в дополнении слова VSTO - PullRequest
3 голосов
/ 26 августа 2011

Я получаю исключение TrustNotGrantedException для некоторых конкретных пользователей нашего надстройки VSTO.

Эти пользователи правильно установили сертификат.

Исключение выдается, когда приложение проверяет наличие обновлений:

try
{
    ApplicationDeployment.CurrentDeployment.CheckForUpdate()
}
catch(TrustNotGrantedException ex)
{
    Log(ex);
}

Трассировка стека записывается следующим образом:

User has refused to grant required permissions to the application.

   at System.Deployment.Application.ApplicationTrust.RequestTrust(SubscriptionState subState, Boolean isShellVisible, Boolean isUpdate, ActivationContext actCtx, TrustManagerContext tmc)    at System.Deployment.Application.DeploymentManager.DetermineTrustCore(Boolean blocking, TrustParams tp)    at System.Deployment.Application.DeploymentManager.DetermineTrust(TrustParams trustParams)    at System.Deployment.Application.ApplicationDeployment.CheckForDetailedUpdate(Boolean persistUpdateCheckResult)    at System.Deployment.Application.ApplicationDeployment.CheckForUpdate()    at iReport.iReportAddIn.CheckForUpdates()

Кто-нибудь сталкивался с этим или знает, как предотвратить это в коде или с помощью обходных путей?

Изменить:

Я прочитал сообщение в блоге о проблемах, и кажется, что это может быть проблема с разрешениями CAS для проблемных пользователей.

Я постараюсь дать проблемному пользователю доступ к URL-адресу обновления, используя это, и вскоре рассмотрим его, хотя я бы предпочел предотвратить это в коде, а не исправлять отдельные клиентские машины. Что-то вроде:

caspol -m -ag 1 -url "http://machinename/application/*" FullTrust -exclusive on

Edit2:

Использование caspol.exe сработало! Кто-нибудь знает способ предотвратить это в коде? Или кто-нибудь может объяснить, почему это может происходить только с отдельными пользователями?

Edit3:

Я собираюсь попробовать добавить

<system.web>
  <!-- level="[Full|High|Medium|Low|Minimal]" -->
  <trust level="Full" originUrl=""/>
</system.web>

в app.config

Edit4:

Добавление полного доверия CAS к app.config не помогло. Может кто-нибудь показать мне, возможно ли добиться того, что CASPOL делает в коде?

Редактировать5:

Если это невозможно сделать в коде, есть ли простой способ запустить команду CASPOL как часть установки clickonce?

1 Ответ

0 голосов
/ 07 сентября 2011

В последних версиях Windows загруженные файлы помечаются как заблокированные, и на них наложены ограничения безопасности, которые могут привести к поломке при использовании другими приложениями из-за изолированной среды.

В реализации используется NTFS alternate streams. Если файл заблокирован, вы можете сказать, щелкнув правой кнопкой мыши на файле, просмотрев свойства и увидев кнопку unblock. Нажатие разблокировки удаляет stream и снимает дополнительные ограничения безопасности.

Его также можно удалить с помощью sysinternals streams.exe. Проверьте, является ли это вашей проблемой, загрузив плагин на компьютер под управлением Windows 7, а затем установите его без разблокировки, чтобы увидеть, воспроизводит ли он проблему.

...