2017-08-07 60 views
1

我在Visual Studio 2017中安装了VSTO程序。为了使我在通过ClickOnce发布并将文件托管在网络上时安装过程更加顺畅,我购买了EV来自DigiCert的证书。在Visual Studio 2017上用EV证书签名VSTO代码

这是我买的 - https://www.digicert.com/code-signing/ev-code-signing/

所以我等了几天,得到了我的USB令牌,设置好一切,现在当我与我看中新的证书签名的应用程序...安装平出失败。

用户得到的错误是: Customized Functionality in this application will not work because the certificate used to sign the deployment manifest for AppName or its location is not trusted. Contact your administrator for further assistance.

我接触DigiCert的技术支持,他们基本上说,这是与Visual Studio 2017年和操作系统错误。

我然后叫委托,看看他们是否能确认,因为他们也有EV证书: https://www.entrust.com/code-signing-certificates/#ev-code-signing-certificates

原来我猜,直到你买一个,他们不能回答这个问题。他们只是说,“买它,尝试它,如果它不起作用,我们会给你你的钱回来。”

怎么可能没有人知道如何从Visual Studio签名安装?

我希望能够签署此安装并使其正常工作。

+0

你有没有想过这个? –

+0

是的,我做了...忘了发布答案...现在就做。 – gotmike

+1

@FrederikHansen - 看看答案...希望有所帮助。 – gotmike

回答

2

经过在DigiCert的支持下花费了很多时间在电话上,我们终于找到了一个可行的过程。

在这种情况下,并不是显而易见的是你最终会做很多代码签名。

因此,当您构建VSTO应用程序时,请使用EV证书对代码进行签名。然后,当你想发布(使用ClickOnce)你将不得不再次签名。

但即使在那之后,你必须重新签署设置文件两次更多的时间才能完成这一切!

在此花费大量时间之后,我现在有一个批处理文件执行最后的步骤,包括将设置文件同步到Amazon S3进行部署。

因此,这里是我如何做到这一点:

  1. 一旦你安装了USB加密狗,你设置在Visual Studio中您的应用程序,以引用正确 证书的“签名” 部分。
  2. 用鼠标右键单击您的项目,然后单击Build(或Rebuild为 保险柜),您将不得不使用加密狗进行签名。
  3. 现在,右键单击该项目,并挑选Properties
  4. PropertiesSigning并确认您选择了 正确的证书。如果你跳过这一步,应用程序将不会安装 。
  5. 仍在里面Properties转到Publish并确保将 设置为您的发布位置和安装文件夹。我使用Amazon S3 作为安装文件夹。
  6. 点击Publish Now。它会要求你再次签名。

现在,你会认为在这一点上你会完成...但你不是。

  1. 所以你下一步需要的是一个.p12证书。我联系了 DigiCert的支持,他们能够免费给我一个(因为我有这么多问题,因此只有一年的问题 )。这是不同于EV证书的 。
  2. 后你有.p12证书和EV,我运行批处理 程序,其中两次(一次带有.p12然后 与EV再次)签署的setup.exe文件,并推到Amazon S3。

这是我的SignDeploy.bat文件:

echo off 
cls 
echo Signing setup.exe with .p12 Certificate File 
"C:\Program Files (x86)\Windows Kits\10\bin\x64\signtool.exe" sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /f [LOCATION OF P12 FILE] /p [PASSWORD] [LOCATION OF SETUP.EXE] 
pause 
echo Signing setup.exe with EV Certificate from Store 
"C:\Program Files (x86)\Windows Kits\10\bin\x64\signtool.exe" sign /tr http://timestamp.digicert.com /td sha256 /fd sha256 /sha1 [EV HASH FROM DIGICERT] [LOCATION OF SETUP.EXE] 
pause 
echo Dry run on syncing files up to S3 
aws s3 sync [LOCAL DEPLOYMENT FOLDER] [S3 BUCKET AND FOLDER LOCATION] --acl public-read --dryrun 
echo   
echo If that worked, it's time to send them up for real. 
echo Control-C to stop now, or... 
pause 
aws s3 sync [LOCAL DEPLOYMENT FOLDER] [S3 BUCKET AND FOLDER LOCATION] --acl public-read 
pause 

毕竟这(我想你最终输入您的EV证书的密码,共3次)谁从指定位置下载setup.exe(必须是同一个用户如您的应用中所示)将能够安装并运行您的VSTO应用程序。

我们在客户端的安装过程中遇到了其他问题,但使用上述过程解决了签名问题。

我不会假装理解为什么需要签署这么多次,也没有任何意义,这并不能从Visual Studio内部顺利运行。 DigiCert试图让我使用Build Events来做到这一点,但它不起作用B/C这些进程在BUILD的任一侧运行而不是在PUBLISH上运行。我们需要的是我认为不存在的Publish Events

我已经探索了使用MsBuild.exe进行更长时间的更多参与命令行过程的想法,但很难这样做Automatically increment revision with each release部件。

也许这里有人有一个想法如何设置。我的过程还是有点手动的,但在这一点上它似乎可靠地工作,所以我不倾向于太多地混淆它。