2010-11-30 5 views
41

Ich baue ein MSI-Installationsprogramm für Windows und signiere das Installationsprogramm mit Signtool. Wenn ich die .msi zum Testen ausprobiere, erscheint die UAC (User Account Control) - Eingabeaufforderung, um mich zu fragen, ob ich der Installation erlauben möchte, fortzufahren. Das ist in Ordnung, aber die Eingabeaufforderung zeigt eine Reihe von Feldern an, und für das Feld Programmname wird etwa "403b3.msi" angezeigt. Dies ist nicht der Name der MSI, die ich ausführe.Die UAC-Eingabeaufforderung zeigt einen temporären zufälligen Programmnamen für msi, kann der korrekte Name angezeigt werden?

Wie kann ich den richtigen Programmnamen angezeigt bekommen?

Antwort

51

Verwenden Sie das Befehlszeilenargument/d mit dem erforderlichen Programmnamen, wenn Sie signtool ausführen, um die MSI zu signieren.

Es scheint, dass das Windows-Installationsprogramm eine temporäre Kopie der MSI-Datei erstellt und ihr vor der Ausführung einen generierten Namen zuweist. Wenn Sie/d nicht mit signtool verwenden, sehen Sie den temporären Dateinamen, der für Ihre Benutzer nicht sehr nützlich ist.

+1

Beim Hinzufügen/d, Sie auch eine Beschreibung benötigen. IE:/d "Meine Anwendung!" – Dave

2

Dies ist eine angewandte Version von @ Scott-Langhams Kommentar.

war direkt aus dem Postbuildevent eines visuellen Projekt Studio Installer - VDPROJ

Datei
set signtool="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\signtool.exe" 
set timestampurl=http://timestamp.digicert.com 
set certpath="$(ProjectDir)CodeSigningCert.pfx" 

:: Setup in your user environment variables 
:: using something with low sort order to force off screen ZZCODECERTPASSWORD 
if []==[%ZZCODECERTPASSWORD%] (
echo must set code signing certificate in ZZCODECERTPASSWORD environment variable. stopping build. 
exit /b 2 
) 

:: need the filename with extension that is being generated 
FOR /f %%i IN ("$(BuiltOuputPath)") DO (
SET outputfilename=%%~nxi 
) 

%signtool% sign /t %timestampurl% /f %certpath% /p %CODECERTPW% /d %outputfilename% "$(BuiltOuputPath)" 
IF ERRORLEVEL 1 (
echo failed to sign MSI 
exit /b 3 
) 

%signtool% sign /t %timestampurl% /f %certpath% /p %CODECERTPW% "$(ProjectDir)$(Configuration)\Setup.exe" 
IF ERRORLEVEL 1 (
echo failed to sign boostrap setup EXE 
exit /b 4 
) 
Verwandte Themen