Inno Setup:在卸载程序的 UAC 提示符中替换 "Setup/Uninstall" 字符串

Inno Setup: Replace "Setup/Uninstall" string in UAC prompt for uninstaller

我正在对使用 Inno Setup 创建的安装程序包进行数字签名。当用户启动卸载程序时,最开始出现以下 UAC 提示:

我可以用 AppName 指令替换安装包红色框中的文本,但我不能为卸载程序执行此操作。

如何在卸载程序中用自定义字符串替换默认 "Setup/Uninstall" 字符串?

当您设置 AppName 时,它在安装程序的二进制资源块(以及其他地方)中以 “文件描述” 结束。这就是我认为 UAC 提示符显示的内容。

对于二进制卸载程序,“文件描述” 被硬编码为 “Setup/Uninstall”。你不能改变它(至少不能没有一些黑客)。


但是 afaik,UAC 提示实际上更喜欢显示二进制数字签名的描述。当您的二进制文件已签名时,只需确保在签名时指定描述即可。如果您使用的是 Microsoft signtool,请使用其 sign command's /d 开关。

在 Inno Setup 中,签名命令在安装程序和卸载程序之间共享。但他们仍然分开签署。所以仍然可以对它们进行不同的描述。只需创建一个签名脚本(一个简单的 Windows 批处理文件即可),它会检查正在签名的内容,选择适当的描述并调用 signtool。并在 Inno Setup 中使用您的签名脚本,而不是直接使用 signtool

一个简单的例子:

@echo off
set FILENAME=%~n1
if "%FILENAME%" == "uninst.e32" ( 
  set DESC=My Program Uninstaller 
) else (
  set DESC=My Program Installer 
)

signtool sign ... /d "%DESC%" "%1"
  • 有关此概念的证明,请参阅

  • 请注意,sign 命令不会以您的脚本路径作为工作目录来执行。所以你必须使用完整路径(或更改 PATH)。在iss脚本中定义路径时,使用SourcePathpreprocessor variable。像这样:

    SignTool=mysignscript {#SourcePath}\sign.bat $f
    
  • 使用一些巧妙(但不可读)的语法,应该可以直接在 .iss 脚本中用一行代码实现相同的效果。不过,我建议使用 powershell 而不是 cmd

  • Ntb,如上面链接的问题所示,签名脚本正是您可以用来破解卸载程序的 “文件描述” 的地方,如果你也想修改它