You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免Windows SmartScreen拦截已签名的WIX 5安装包

解决WIX 5 Bundle签名后SmartScreen仍提示“未知发布者”的问题

问题现象

  • 已将全新代码签名证书集成到MSBuild构建流程,采用WIX 5 Bundle(搭配Heatwave扩展),按官方流程分两步对引擎和Bundle进行签名
  • 点击安装程序的Burn Install按钮后,Windows UAC提示能正常显示发布者名称,但通过浏览器下载安装程序后,MS Defender SmartScreen会提示风险并显示“未知发布者”,需手动点击“仍要运行”才能继续
  • 查看Bundle的exe属性,发现未添加数字签名;尝试手动签名Bundle会导致文件损坏,用命令行分离引擎签名后重新附加,Bundle属性仍无签名

问题根源

经确认构建流程必须对Bundle完成签名,检查项目文件后发现SignBundle目标的路径引用错误:

错误代码

<Target Name="SignBundleEngine">
    <Message Importance="high" Text="SignBundleEngine: @(SignBundleEngine)" />
    <Exec Command='sign.cmd "%(SignBundleEngine.FullPath)"' />
</Target>
<Target Name="SignBundle">
    <Message Importance="high" Text="SignBundle: @(SignBundle)" />
    <Exec Command='sign.cmd "%(SignBundleEngine.FullPath)"' />
</Target>

修正后代码

<Target Name="SignBundleEngine">
    <Message Importance="high" Text="SignBundleEngine: @(SignBundleEngine)" />
    <Exec Command='sign.cmd "%(SignBundleEngine.FullPath)"' />
</Target>
<Target Name="SignBundle">
    <Message Importance="high" Text="SignBundle: @(SignBundle)" />
    <Exec Command='sign.cmd "%(SignBundle.FullPath)"' />
</Target>

错误原因在于SignBundle目标中错误使用了%(SignBundleEngine.FullPath)作为签名路径,导致仅完成了引擎签名,并未对Bundle本身进行签名。修正为%(SignBundle.FullPath)后,Bundle可正常完成签名,SmartScreen提示问题解决。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 05:43:16