Я получаю исключение 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?