2010-11-30 39 views
41

Je suis en train de construire un programme d'installation MSI pour windows et de signer l'installateur à l'aide de signtool. Lorsque j'exécute le .msi pour le tester, l'invite UAC (User Account Control) s'affiche pour me demander si je veux autoriser l'installation. C'est bien, mais l'invite affiche un certain nombre de champs, et pour le champ Nom du programme, il affiche quelque chose comme "403b3.msi". Ce n'est pas le nom du msi que je cours.L'invite UAC affiche un nom de programme aléatoire temporaire pour msi, le nom correct peut-il être affiché?

Comment puis-je obtenir le bon nom de programme à afficher?

Répondre

51

Utilisez l'argument de ligne de commande/d avec le nom de programme requis lors de l'exécution de signtool pour signer le msi.

Il semble que le programme d'installation de Windows crée une copie temporaire du fichier msi et lui assigne un nom généré avant de l'exécuter. Si vous n'utilisez pas/d avec signtool, vous verrez le nom de fichier temporaire qui n'est pas très utile pour vos utilisateurs.

+1

Lors de l'ajout/d, vous avez besoin d'une description aussi. IE:/d "Ma demande!" – Dave

2

Ceci est une version appliquée du commentaire de @ Scott-langham.

cela était directement du PostBuildEvent d'un projet d'installation de Visual Studio - fichier vdproj

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 
)