我正在为 Windows 构建一个 MSI 安装程序并使用 signtool 对安装程序进行签名。当我运行 .msi 对其进行测试时,会出现 UAC(用户帐户控制)提示,询问我是否要允许安装继续进行。这很好,但提示显示了许多字段,并且对于程序名称字段,它显示类似“403b3.msi”的内容。这不是我正在运行的 msi 的名称。
如何获得要显示的正确程序名称?
我正在为 Windows 构建一个 MSI 安装程序并使用 signtool 对安装程序进行签名。当我运行 .msi 对其进行测试时,会出现 UAC(用户帐户控制)提示,询问我是否要允许安装继续进行。这很好,但提示显示了许多字段,并且对于程序名称字段,它显示类似“403b3.msi”的内容。这不是我正在运行的 msi 的名称。
如何获得要显示的正确程序名称?
在执行 signtool 对 msi 进行签名时,使用带有所需程序名称的 /d 命令行参数。
Windows 安装程序似乎创建了 msi 文件的临时副本,并在运行它之前为其分配了一个生成的名称。如果您不将 /d 与 signtool 一起使用,您会看到临时文件名,这对您的用户来说不是很有用。
这是@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
)