UAC提示符显示msi的临时随机程序名称,是否可以显示正确的名称?

时间:2010-11-30 16:11:52

标签: windows certificate uac signtool

我正在构建Windows的MSI安装程序并使用signtool对安装程序进行签名。当我运行.msi进行测试时,UAC(用户帐户控制)提示出现,询问我是否要允许安装继续进行。没关系,但是提示显示了许多字段,而对于Program Name字段,它显示的内容类似于“403b3.msi”。这不是我正在运行的msi的名称。

如何才能显示正确的程序名?

2 个答案:

答案 0 :(得分:61)

在执行signtool签名msi时,将/ d命令行参数与所需的程序名一起使用。

Windows安装程序似乎会创建msi文件的临时副本,并在运行之前为其分配生成的名称。如果你不使用/ d和signtool,你会看到对你的用户来说不是很有用的临时文件名。

答案 1 :(得分:4)

这是@ 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
)