我正在尝试使用ClickOnce部署一个VSTO解决方案,它是Word和Outlook的两个加载项。由于我们的部署基础结构/实践,我无法使用Visual发布它,而是在构建服务器上构建并通过部署服务器进行部署。
对于本地开发,使用自签名证书。该部署使用此自签名证书(如果计算机上安装了自签名证书),但现在我想添加一个真正的公司证书,以便将应用程序部署到用户。
在部署期间,配置文件被戳入后,它们将被更新,并使用真正的证书重新签名。但是,这会在安装过程中产生以下错误:
System.Security.SecurityException: Customized functionality in this application will not work because the certificate used to sign the deployment manifest for <app name> or its location is not trusted. Contact your administrator for further assistance.
at Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInTrustEvaluator.VerifyTrustPromptKeyInternal(ClickOnceTrustPromptKeyValue promptKeyValue, DeploymentSignatureInformation signatureInformation, String productName, TrustStatus status)
at Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInTrustEvaluator.VerifyTrustUsingPromptKey(Uri manifest, DeploymentSignatureInformation signatureInformation, String productName, TrustStatus status)
at Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInTrustEvaluator.VerifyTrustUsingPromptKey(Uri manifest, DeploymentSignatureInformation signatureInformation, String productName)
at Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.ProcessSHA1Manifest(ActivationContext context, DeploymentSignatureInformation signatureInformation, PermissionSet permissionsRequested, Uri manifest, ManifestSignatureInformationCollection signatures, AddInInstallationStatus installState)
at Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.VerifySecurity(ActivationContext context, Uri manifest, AddInInstallationStatus installState)
at Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.InstallAddIn()
The Zone of the assembly that failed was:
MyComputer
我唯一的线索是,在重新签名之后,publisherIdentity元素中的值不会被更改( .vsto和.manifest),只有签名元素有对应于新证书的值。
下面的命令用于对.vsto和.manifest文件进行签名(据我从部署脚本中看到的):
mage.exe -Update "[path to .vsto/.manifest]"
mage.exe -Sign "[path to .vsto/.manifest]" -CertHash [certificateHash]
其中,certificateHash是真实证书的指纹,用于在证书存储中查找证书。有人告诉我,这是一种安全措施,这样证书文件就不必与部署包一起分发。
签名后,文件的签名值会发生更改,但publisherIdentity仍然具有自签名证书的名称和issuerKeyHash。
在重新签名之前,我尝试过查看这两个值,但我不知道如何计算issuerKeyHash。
任何关于如何进行的建议将不胜感激!
编辑:
我正在尝试其他mage.exe参数,比如'-TrustLevel FullTrust‘(没有任何效果)或'-UseManifestForTrust True’以及名称和发布者参数,这会产生这个错误消息(与上面提到的错误消息不同)。
************** Exception Text **************
System.InvalidOperationException: You cannot specify a <useManifestForTrust> element for a ClickOnce application that specifies a custom host.
at Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.GetManifests(TimeSpan timeout)
at Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.InstallAddIn()
。
发布于 2015-02-27 16:22:47
我们已经找到了问题所在。我们使用了Windows中一个名为7A的文件夹中的mage.exe工具(对不起,我不记得完整的路径)。然后,一位同事找到了另一个带有7A、8和8A版本的文件夹。一旦我们从8A文件夹中获取.exe,安装就像预期的那样工作。
https://stackoverflow.com/questions/28720277
复制相似问题