2010-11-30 83 views
41

我正在構建Windows的MSI安裝程序並使用signtool簽署安裝程序。當我運行.msi進行測試時,UAC(用戶帳戶控制)提示出現問我是否要繼續安裝。這很好,但提示顯示了一些字段,並且對於Program Name字段,它顯示類似「403b3.msi」的內容。這不是我正在運行的msi的名稱。UAC提示符顯示msi的臨時隨機程序名稱,可以顯示正確的名稱嗎?

如何獲取正確的程序名稱以顯示?

回答

51

在執行signtool簽署msi時,使用帶有所需程序名稱的/ d命令行參數。

看來,Windows安裝程序創建msi文件的臨時副本,並在運行之前爲其分配一個生成的名稱。如果你沒有在signtool中使用/ d,你會看到臨時文件名,這對你的用戶不是很有用。

+1

當添加/ d,你需要一個描述也。 IE:/ d「我的應用程序!」 – Dave 2017-03-20 21:13:47

2

這是@ Scott-langham的評論的應用版本。

,這是直接從Visual Studio安裝項目的PostBuildEvent - 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 
)