我正在为我们的 VSTO word 插件的某些特定用户抛出 TrustNotGrantedException。
这些用户已正确安装证书。
应用程序检查更新时抛出异常:
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()
有没有人遇到过这种情况或知道如何在代码中或使用任何解决方法来防止这种情况?
编辑:
我已经通读了这个 blog post在这些问题上,对于问题用户来说,这似乎是 CAS 权限的问题。
我会尝试让有问题的用户使用它来访问更新 URL,稍后会跟进,尽管我更希望能够在代码中阻止这种情况,而不是修复单个客户端机器。像这样的东西:
caspol -m -ag 1 -url "http://machinename/application/*" FullTrust -exclusive on
编辑2:
使用 caspol.exe 成功了!有谁知道在代码中防止这种情况发生的方法吗? 或者谁能解释为什么它只能发生在特定用户身上?
编辑3:
我要尝试添加
<system.web>
<!-- level="[Full|High|Medium|Low|Minimal]" -->
<trust level="Full" originUrl=""/>
</system.web>
到app.config
编辑4:
将完整的 CAS 信任添加到 app.config 没有帮助。谁能告诉我是否可以用代码实现 CASPOL 正在做的事情?
编辑5:
如果无法在代码中执行此操作,是否有一种简单的方法来运行 CASPOL 命令作为 clickonce 安装的一部分?
最佳答案
在最新版本的 Windows 中,下载的文件被标记为已阻止,并对其施加了安全限制,由于沙盒,这些文件在被其他应用程序使用时可能会导致损坏。
该实现使用 NTFS 备用流
。如果文件被阻止,您可以通过右键单击文件、查看属性并看到 unblock
按钮来判断。单击取消阻止会删除 流
并解除额外的安全限制。
它也可以使用 sysinternals
删除 streams.exe
.通过在 Windows 7 计算机上下载您的插件来测试这是否是您的问题,然后在不解锁的情况下安装以查看它是否重现该问题。
关于c# - 在 VSTO word 插件中调试 TrustNotGrantedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7202083/