经过在DigiCert的支持下花费了很多时间在电话上,我们终于找到了一个可行的过程。
在这种情况下,并不是显而易见的是你最终会做很多代码签名。
因此,当您构建VSTO应用程序时,请使用EV证书对代码进行签名。然后,当你想发布(使用ClickOnce)你将不得不再次签名。
但即使在那之后,你必须重新签署设置文件两次更多的时间才能完成这一切!
在此花费大量时间之后,我现在有一个批处理文件执行最后的步骤,包括将设置文件同步到Amazon S3进行部署。
因此,这里是我如何做到这一点:
- 一旦你安装了USB加密狗,你设置在Visual Studio中您的应用程序,以引用正确 证书的“签名” 部分。
- 用鼠标右键单击您的项目,然后单击
Build
(或Rebuild
为 保险柜),您将不得不使用加密狗进行签名。
- 现在,右键单击该项目,并挑选
Properties
- 内
Properties
去Signing
并确认您选择了 正确的证书。如果你跳过这一步,应用程序将不会安装 。
- 仍在里面
Properties
转到Publish
并确保将 设置为您的发布位置和安装文件夹。我使用Amazon S3 作为安装文件夹。
- 点击
Publish Now
。它会要求你再次签名。
现在,你会认为在这一点上你会完成...但你不是。
- 所以你下一步需要的是一个
.p12
证书。我联系了 DigiCert的支持,他们能够免费给我一个(因为我有这么多问题,因此只有一年的问题 )。这是不同于EV证书的 。
- 后你有
.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
部件。
也许这里有人有一个想法如何设置。我的过程还是有点手动的,但在这一点上它似乎可靠地工作,所以我不倾向于太多地混淆它。
你有没有想过这个? –
是的,我做了...忘了发布答案...现在就做。 – gotmike
@FrederikHansen - 看看答案...希望有所帮助。 – gotmike