c# - 在 VSTO word 插件中调试 TrustNotGrantedException

标签 c# exception vsto certificate code-access-security

我正在为我们的 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/

相关文章:

vba - 从具有合并单元格的表格中删除列

c# - 使用数组进行非托管导出

git - 如何解决这个问题,在执行 merge 命令期间捕获异常。 org.eclipse.jgit.errors.MissingObjectException :

临界区中的 C++ 异常处理(pthreads)

.net - 根据办公产品的语言本地化 VSTO 插件

c# - 在 C# (VTSO) 中将 Excel FitToPagesWide 设置为 "Automatic"

c# - 如何检查我的计算机上是否打开了另一个应用程序窗口(即遍历所有打开的窗口)?

c# - 在主窗口边界之上/之外显示 wpf 内容

c# - gridview 中的 Windows 8.1 选择模式

java - JVM 无法正确加载类