2010-11-30 69 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 
)