手动更新已签名的 ClickOnce 应用程序会引发 TrustNotGrantedException

Posted

技术标签:

【中文标题】手动更新已签名的 ClickOnce 应用程序会引发 TrustNotGrantedException【英文标题】:Manual update for signed ClickOnce app throws TrustNotGrantedException 【发布时间】:2019-01-08 15:13:38 【问题描述】:

我有一个 ClickOnce 部署,它由从 Symantec 获得的证书签名。启动设置后的安全警告提示显示发布者名称。所以是值得信赖的。但是打电话的时候

ApplicationDeployment.CurrentDeployment.CheckForDetailedUpdate()

我收到 TrustNotGrantedException - 用户拒绝授予应用程序所需的权限。

如果我将我的证书添加到我机器上的 Trusted Publishers Store,则不会引发异常,并且赛门铁克的 CA 也会添加到存储中。但显然我无法将证书添加到使用该应用程序的客户的 Trusted Publishers Store。

该应用程序首先从光盘安装,每次启动时都会检查在线更新网址。 如果我之后从 Trusted Publishers Store 中删除证书,如果我再次尝试手动更新仍然有效。这些信息是否也存储在其他地方?

如果我不签署已发布的 ClickOnce 应用程序,则手动更新有效。 如果我使用使用 makecert 制作的自签名证书对已发布的 ClickOnce 应用程序进行签名,则手动更新将起作用。 那么证书可能有问题?

如何确定是否存在证书问题以及接下来应该执行哪些步骤?

【问题讨论】:

【参考方案1】:

我们现在使用InPlaceHostingManager Class。它用于安装或更新 ClickOnce 部署。 GetManifestAsync() 触发 GetManifestCompleted 事件,它会为您提供版本号。然后您可以调用DownloadApplicationAsync() 并处理DownloadApplicationCompleted 事件。到目前为止,这是可行的,并且没有抛出 TrustNotGrantedException。

【讨论】:

以上是关于手动更新已签名的 ClickOnce 应用程序会引发 TrustNotGrantedException的主要内容,如果未能解决你的问题,请参考以下文章

ClickOnce 代码签名:“从商店中选择”还是“从文件中选择”?

C# clickonce用处

如何让ClickOnce进行手动更新

.NET 4 ClickOnce 过期证书

ClickOnce管理员启动并且支持ClickOnce更新

签名的 ClickOnce 应用程序给出“无法验证发布者”