我尝试使用ClickOnce部署VSTO解决方案,这是Word和Outlook的2个插件。由于我们的部署基础架构/实践,我无法使用Visual Studio发布它,而是构建在构建服务器上并通过部署服务器进行部署。
对于本地开发,使用自签名证书。部署使用此自签名证书(如果在计算机上安装了自签名证书),但现在我想添加一个真实的公司证书,以便可以将应用程序部署到用户。
在部署期间,在调配配置文件后,将使用真实证书更新和重新签名。但是,这会在安装期间产生以下错误:
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),只有Signature元素具有与新证书对应的值。
以下命令用于签署.vsto和.manifest文件(据我从部署脚本中可以看到):
mage.exe -Update "[path to .vsto/.manifest]"
mage.exe -Sign "[path to .vsto/.manifest]" -CertHash [certificateHash]
其中[certificateHash]是真实证书的指纹,用于在证书库中查找证书。我告诉这是安全措施,因此证书文件不必与部署包一起分发。
签名后,文件的Signature值已更改,但publisherIdentity仍具有自签名证书的名称和issuerKeyHash。
我尝试在重新签名之前调整这两个值,但我不知道如何计算issuerKeyHash。
非常感谢任何关于如何进行的建议!
编辑:
我正在尝试其他mage.exe参数,例如&#39; -TrustLevel FullTrust&#39; (没有任何效果)或者&#39; -UseManifestForTrust True&#39;以及Name和Publisher参数,它们产生了此错误消息(与上面提到的不同)。
************** 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()
答案 0 :(得分:15)
Windows不信任应用程序签名的证书。作为一种解决方法,
setup.exe
,properties
,然后选择Digital Signatures
标签Details
View Certificate
,然后点击Install Certificate
。不要让它自动选择存储sert的位置,将证书安装在受信任的根证书颁发机构存储中。安装证书后,应用程序应安装...
答案 1 :(得分:2)
请查看Granting Trust to Office Solutions文章,其中说明了以下内容:
如果您使用已知且受信任的证书对解决方案进行签名,则会自动安装解决方案,而不会提示最终用户做出信任决策。 获取证书后,必须通过将证书添加到“受信任的发布者”列表来明确信任该证书。
有关详细信息,请参阅How to: Add a Trusted Publisher to a Client Computer for ClickOnce Applications。
另外,您可能会发现Deploying an Office Solution by Using ClickOnce文章很有帮助。
答案 2 :(得分:0)
我们发现了问题所在。我们从名为7A的文件夹中使用了Windows SDK中的mage.exe工具版本(我不记得完整路径,抱歉)。然后,一位同事找到了另一个版本为7A,8和8A的文件夹。一旦我们从8A文件夹中获取.exe,安装就会按预期工作。
答案 3 :(得分:0)
尝试将所有必需的文件复制到客户端计算机,然后安装。如果您可以避免从网络驱动器安装,则可以避免此异常。