如何使MSBuild对Clickonce应用程序中的所有文件进行签名

拉斐尔·西蒙内利(Rafael Simonelli)

我有一个由Clickonce安装的应用程序(WPF),现在我需要对其进行签名,以便Windows可以将我的公司识别为受信任的发行者。我的CI工具中使用了以下命令行(带有菱形<>的参数仅用于说明情况):

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /target:clean;build;publish /p:ApplicationVersion=<VERSION> /p:SignAssembly=true /p:GenerateManifests=true /p:SignManifests=true /p:AssemblyOriginatorKeyFile=<PFX_PATH> /p:ManifestCertificateThumbprint=<CERTIFICATE_ID> /property:Configuration=<CONFIGURATION>;PublishDir=<PUBLISH_DIR>;BootstrapperEnabled=true;PublishUrl=<PUBLISH_URL>;InstallUrl=<INSTALL_URL>;UpdateUrl=<UPDATE_URL> C:\hudson\slave\workspace\NIMBUS-NFE-NFEasy2\NFeasy2\NFeasy2.sln

问题是:仅setup.exe被签名,并且仅使用SHA-256算法。因此,当用户运行我的应用程序时,无法识别发行者。另外,在Windows XP上运行时,安装程​​序将永远不会运行,因为SO无法识别签名(似乎WinXP需要SHA-1)。

如何设置项目或命令行以使用SHA-1和SHA-256算法对所有文件进行签名?此外,是否会在每次运行应用程序时停止提示用户的权限?如果没有,有办法吗?

谢谢!

拉斐尔·西蒙内利(Rafael Simonelli)

通过Internet阅读了许多解决方案后,我设法编写了一个批处理文件来进行完整的签名。请注意,这仅适用于特定版本,我必须按以下顺序将它们放入“路径”:

C:\Program Files (x86)\Windows Kits\8.1\bin\x86;

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin;

脚本如下:

rem renaming the setup.exe because it will be treated separately
ren setup.exe setup._

rem removing the .DEPLOY extension, getting back the original one
for /r %%x in (*.deploy) do ren "%%x" *.

rem signing all files with my certificate
for /r %%x in (*.exe *.dll) do signtool.exe sign /fd sha1 /as /sha1 <MY_CERTIFICATE> "%%x"
for /r %%x in (*.exe *.dll) do signtool.exe sign /fd sha256 /as /sha1 <MY_CERTIFICATE> "%%x"

rem updating the manifest with the new signatures
for /r %%x in (*.manifest) do mage.exe -update "%%x"

rem signing the manifest file
for /r %%x in (*.manifest) do mage.exe -sign "%%x" -ch <MY_CERTIFICATE>

rem putting the .DEPLOY extension in all files renamed previously
for /r %%x in (*.exe *.dll *.config *.cer *.ttf *.ico *.xml *.p7b) do ren "%%x" *.*.deploy

rem getting back setup.exe
ren setup._ setup.exe 

rem signing setup.exe file
signtool.exe sign /fd sha1 /as /sha1 <MY_CERTIFICATE> setup.exe
signtool.exe sign /fd sha256 /as /sha1 <MY_CERTIFICATE> setup.exe

rem updating MyApp.Application file
for /r %%x in (*.manifest) do mage.exe -update MyApp.Application -appm "%%x"

rem signing MyApp.Application file
mage.exe -sign MyApp.Application -ch <MY_CERTIFICATE>

rem updating the new signed file to the destiny folder
for /r %%x in (*.application) do xcopy MyApp.Application "%%x" /y

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在构建后事件中对ClickOnce应用程序进行签名?

使用AfterCompile目标对ClickOnce应用程序进行签名

如何使MSBuild命令行在发布过程中忽略非ClickOnce应用程序?

如何使用Xcode5在Mac应用程序中对签名的可执行文件进行代码签名

如何从SpringBoot应用程序的资源文件夹中读取所有文件?

如何清除根目录中的所有应用程序数据以进行注销?

发布时在clickonce应用程序内签名可执行文件

如何删除 Django 应用程序中的所有迁移文件

如何快速从“应用程序”文档目录中获取所有文件?

如何使文件在Visual Basic应用程序中可供所有用户访问

如何从 Android 应用程序的所有文件中删除未使用的项目?

在macOS应用程序包中对Automator Workflow文件进行代码签名

应用程序如何使用JAR中的文件进行读写?

如何禁用 Flutter 应用程序中的所有动画?

如何跟踪Java应用程序中的所有组件?

如何列出系统中安装的所有应用程序?

如何在Linux中对Mac OS X应用程序进行签名?

控制台应用程序对文本文件中的所有“#”字符进行计数

如何卸载ClickOnce应用程序?

ClickOnce应用程序中的DllNotFoundException

如何在没有应用程序脚本的情况下从公共工作表中获取所有谷歌工作表标签名称

iPhone应用程序签名:在钥匙串中找不到与该配置文件匹配的有效签名身份

用来对应用程序进行签名的证书的哪些信息存储在应用程序中?

如何修复Google-cloud-sdk 156.0.0“应用程序中文件太多,无法监视所有文件中的更改。”?

如何捕获WPF应用程序中的所有用户操作以将它们存储在日志文件中?

在带有签名的应用程序中实现指纹认证

应用程序启动后,Java应用程序中的所有.class文件是否都已加载到内存中?

如何使用PIV智能卡(YubiKey 4)对应用程序二进制文件进行签名?

如何将我所有的django应用程序保留在特定文件夹中