2017-02-13 6 views
2

Ich habe eine Anwendung (WPF) von Clickonce installiert und jetzt muss ich es signieren, damit Windows meine Firma als vertrauenswürdiger Aussteller erkennen kann. Die folgende Befehlszeile wurde in meinem C.I. Werkzeug (Parameter mit Diamanten <> werden nur verwendet, um die Situation zu erläutern):Wie MSBuild alle Dateien in einer Clickonce-Anwendung signiert

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 

Das Problem ist: nur die setup.exe signiert sind, und nur mit SHA-256-Algorithmus. Wenn der Benutzer also meine Anwendung ausführt, wird der Aussteller nicht erkannt. Außerdem wird das Setup unter Windows XP nie ausgeführt, da der SO die Signatur nicht erkennt (es scheint, dass WinXP SHA-1 benötigt).

Wie kann ich mein Projekt oder meine Befehlszeile einrichten, um alle Dateien mit SHA-1- und SHA-256-Algorithmen zu signieren? Wird die Benutzerberechtigung auch bei jeder Ausführung der Anwendung nicht mehr angezeigt? Wenn nicht, gibt es einen Weg dazu?

Danke!

Antwort

0

Nach dem Lesen einer Vielzahl von Lösungen über das Internet, habe ich es geschafft, eine Batch-Datei zu schreiben, um die vollständige Unterzeichnung zu tun. Beachten Sie, dass dies nur mit bestimmten Versionen funktioniert, und ich hatte sie in meinem Pfad in der folgenden Reihenfolge setzen:

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

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

Das Skript ist folgendes:

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 
Verwandte Themen