You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

signtool.exe签名MSI应用名称存储位置及UAC显示适配技术咨询

关于MSI签名后UAC提示文本的问题

一、signtool.exe签名时,应用名称存在哪里?

当你用signtool.exe给MSI签名时,UAC弹窗里显示的应用名称,核心来源是MSI文件自身属性表中的ProductName属性。signtool在签名过程中会确保系统能正确关联这个属性值,所以最终UAC会优先展示这个ProductName,再结合签名证书里的发行者信息。

二、解决自定义签名工具的UAC文本显示问题

你说用CryptUIWizDigitalSign API签名后,UAC显示的不是想要的文本,填了pwszDescription也没用——这是因为MSI的UAC提示逻辑里,MSI自身的属性优先级远高于签名时设置的描述字段。要让UAC显示“Our awesome application”,得从这两个关键点入手:

1. 先把MSI本身的ProductName改对

这是最核心的一步!UAC弹窗首先会读MSI内部Property表的ProductName值。你可以用Windows SDK里的Orca工具打开MSI文件,找到Property表,把ProductName直接改成“Our awesome application”。如果是用WiX这类工具构建MSI的话,直接在项目配置里设置ProductName属性就行,不用事后改文件。

2. 正确配置CryptUIWizDigitalSign的参数

虽然ProductName是主力,但签名的元数据也得配置对,避免系统 fallback 到默认ID。你要注意这几点:

  • 初始化CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO时,一定要把dwSize设成sizeof(CRYPTUI_WIZ_DIGITAL_SIGN_EXTENDED_INFO),很多人容易漏这个,导致后续字段不生效
  • 签名类型要选对,针对MSI这类安装包,记得加上CRYPTUI_WIZ_DIGITAL_SIGN_FLAG_TIMESTAMP(如果需要时间戳),确保签名符合代码签名的规范
  • 确保你用的是有效的代码签名证书,而且系统信任这个证书——如果证书不被信任,UAC可能会直接显示通用提示,不管你设置了什么

3. 验证签名效果

签名完之后,用signtool verify /v /pa your.msi命令检查签名是否有效,同时右键MSI→属性→数字签名,看看签名详情里的描述是否正确。另外也可以直接双击MSI触发UAC,测试显示效果。

小补充:UAC的文本逻辑是:优先显示MSI的ProductName → 然后是签名证书的发行者信息 → 如果前两个都没正确设置,才会显示文件ID或者签名描述。所以别盯着签名的描述字段死磕,先把MSI自身的ProductName改对才是关键。

内容的提问来源于stack exchange,提问作者Dan

火山引擎 最新活动