signtool.exe签名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




