2010-11-30 20 views
41

Windows用のMSIインストーラをビルドしていて、signtoolを使用してインストーラに署名します。 .msiを実行してテストすると、UAC(ユーザーアカウント制御)のプロンプトが表示され、インストールを続行するかどうかを尋ねるメッセージが表示されます。大丈夫ですが、プロンプトにはいくつかのフィールドが表示され、プログラム名フィールドには「403b3.msi」のようなものが表示されます。これは私が走っているmsiの名前ではありません。UACプロンプトは、msiの一時ランダムプログラム名を表示します。正しい名前を表示できますか?

正しいプログラム名を表示するにはどうすればよいですか?

答えて

51

signtoolを実行してmsiに署名するときに、必要なプログラム名とともに/ dコマンドライン引数を使用します。

Windowsインストーラはmsiファイルの一時的なコピーを作成し、それを実行する前に生成された名前を割り当てているようです。 signtoolで/ dを使用しないと、一時的なファイル名が表示されますが、これはユーザにとってあまり役に立ちません。

+1

/Dを追加する場合、あなたはまた、説明が必要です。 IE:/ d "My Application!" – Dave

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 
) 
関連する問題