2017-02-13 17 views
2

У меня есть приложение (WPF), установленное Clickonce, и теперь мне нужно его подписать, поэтому Windows может распознать мою компанию как доверенного эмитента. В моей C.I. была использована следующая командная строка. инструмент (параметры с бриллиантами <> используются только для иллюстрации ситуации):Как заставить MSBuild подписывать все файлы в приложении Clickonce

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? Кроме того, это прекратит запрашивать разрешение пользователя при каждом запуске приложения? Если нет, есть ли способ сделать это?

Спасибо!

ответ

0

После прочтения множества решений через Интернет мне удалось написать пакетный файл для полного подписания. Обратите внимание, что это работает только с определенными версиями, и я должен был поместить их в свой путь в следующем порядке:

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