2010-11-30 7 views
41

Estoy construyendo un instalador MSI para Windows y firmo el instalador usando signtool. Cuando ejecuto el .msi para probarlo, aparece el mensaje UAC (Control de cuenta de usuario) para preguntarme si deseo permitir que la instalación continúe. Está bien, pero el mensaje muestra una cantidad de campos, y para el campo Nombre del programa muestra algo así como "403b3.msi". Este no es el nombre del msi que estoy ejecutando.El aviso de UAC muestra un nombre de programa aleatorio temporal para msi, ¿se puede mostrar el nombre correcto?

¿Cómo puedo obtener el nombre del programa correcto para que se muestre?

Respuesta

51

Utilice el argumento de línea de comandos/d con el nombre del programa requerido al ejecutar signtool para firmar el msi.

Parece que el instalador de Windows crea una copia temporal del archivo msi y le asigna un nombre generado antes de ejecutarlo. Si no usa/d con signtool, verá el nombre de archivo temporal que no es muy útil para sus usuarios.

+1

Al añadir/d, se necesita una descripción también. IE:/d "¡Mi aplicación!" – Dave

2

esta es una versión aplicada del comentario de @ Scott-langham.

esto fue directamente desde el PostBuildEvent de un proyecto de instalación de Visual Studio - archivo 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 
) 
Cuestiones relacionadas