'"Windows 已保护你的电脑":SmartScreen 警告是什么意思,怎样消除'
为什么 Windows 会对新安装程序显示"未知发布者"警告,用户可以点什么,以及代码签名和信誉如何让警告消失。
更新于 2026年10月31日 · 阅读约 4 分钟
你发布了一个 Setup.exe,客户下载后,Windows 弹出一个蓝色对话框:"Windows 已保护你的电脑。Microsoft Defender SmartScreen 已阻止启动一个未识别的应用。" 应用没问题,安装程序也没问题。到底发生了什么,又能怎么办?
SmartScreen 在检查什么
SmartScreen 是一项信誉服务。当运行一个从互联网下载的文件时,Windows 会向 Microsoft 查询这个文件,或者为它签名的证书,是否已知且可信。答案由三个因素决定:
- 代码签名。 文件是否使用 Windows 信任的证书颁发机构签发的证书签名,以及该证书(即"发布者")是否有历史记录。
- 下载信誉。 有多少人下载并运行过这个完全相同的文件,以及是否有人举报过它的问题。
- 已知威胁。 文件是否与恶意软件匹配。如果匹配,它会被直接拦截,显示的是红色而不是蓝色界面。
小型发布者的全新安装程序仅仅因为"新"就通不过前两项检查。警告中说"未识别",字面上确实如此,用户可以点击更多信息 → 仍要运行。但很多人不会这么做。
什么能让警告消失
信誉随时间积累
未签名的安装程序会随着越来越多的人下载并顺利运行而积累信誉。对热门下载来说,这需要几天到几周;对小众工具来说可能要很久,而且每个新版本都从零开始,因为文件变了。
代码签名,以及它为什么能改变局面
用代码签名证书为安装程序签名,就把你的身份附加到了它上面。信誉从此累积在证书上,而不是每个文件上,所以新版本会继承旧版本已获得的信任。这是标准的解决办法。
你的选择:
- 公共 CA 签发的标准(OV)代码签名证书(DigiCert、Sectigo、GlobalSign 及其代理商)。自 2023 年起,这类证书签发在硬件令牌或云 HSM 上。预计每年几百美元。信誉仍然从低处起步、随下载量增长,但可以在版本之间延续。
- EV 代码签名证书。 身份审核更严格,价格更高。过去它们能更快获得良好的 SmartScreen 信誉。Microsoft 已逐步缩小这一优势,所以把 EV 看作"更可靠的身份验证",而不是保证立即放行的通行证。
- Azure Trusted Signing。 Microsoft 自家的签名服务,按月计费,面向受支持地区的个人和小型公司。它使用与你已验证身份绑定的短期证书签名,SmartScreen 对它的态度很友好。
无论选哪一种,都要为签名加上时间戳,这样证书过期后签名仍然有效。
为 ExeTup 安装程序签名
ExeTup 负责构建安装程序;签名是你的步骤,因为证书是你的。下载 Setup.exe 之后:
在 Windows 上,使用 Windows SDK:
signtool sign /fd SHA256 /tr http://timestamp.digicert.com /td SHA256 /a Setup.exe
在 macOS 或 Linux 上,使用 osslsigncode:
osslsigncode sign -pkcs12 cert.pfx -pass "..." -t http://timestamp.digicert.com -h sha256 -in Setup.exe -out Setup-signed.exe
NSIS 安装程序无需任何特殊处理即可接受 Authenticode 签名。也请在打包成 zip 之前为你应用自己的 .exe 签名,这样用户启动的程序同样带有签名。右键点击已签名的文件 → 属性 → 数字签名即可确认。
在此期间该告诉用户什么
如果你还没有签名,在下载页面写一段简短说明会有帮助:这个警告会出现在小型发布者的新软件上,安装程序是安全的,点击更多信息 → 仍要运行即可安装。公布文件的 SHA-256 哈希值,让谨慎的用户可以校验下载。ExeTup 会在每次构建的下载旁显示它的哈希值。
另外,把下载放在你自己的域名下并使用 HTTPS,同一版本始终保持同一个文件。重新上传修改过的文件会让下载信誉归零。
没有用的做法
- 重命名文件、打包成 zip 或更换图标。信誉是按文件哈希和证书计算的。
- 自签名证书。Windows 不信任它们,警告依旧存在,而且这样的签名比没有签名观感更差。
- 让用户关闭 SmartScreen。他们不应该这么做,大多数人也不会。
常见问题
我的安装程序被标记为病毒了吗?
没有。蓝色的"Windows 已保护你的电脑"界面表示"未知",而不是"恶意"。红色界面并显示"出于安全考虑,此应用已被阻止"才是恶意软件判定,那是另一个问题。
每个新版本都会再次显示警告吗?
对未签名的安装程序,是的,因为每个版本都是新文件。对已签名的安装程序,信誉跟随证书,所以后续版本一开始就拥有早先版本积累的信任。
ExeTup 会为安装程序签名吗?
目前不会。请用你自己的证书,通过 signtool 或 osslsigncode 为下载的 Setup.exe 签名。安装程序像任何其他 Windows 可执行文件一样接受签名。
卸载程序也会显示这个警告吗?
卸载程序是从本地磁盘运行的,不是下载的,所以 SmartScreen 不会检查它。对于为所有用户安装的情况,用户可能会看到的是标准的用户账户控制提示。
相关指南
- 如何为 Windows 应用制作 Setup.exe(无需编写代码)了解 Setup.exe 实际做了什么、制作安装程序的三种方式,以及如何无需编写安装脚本,几分钟内把应用文件夹变成专业的安装程序。
- 在 Mac 或 Linux 上制作 Windows 安装程序在 macOS 或 Linux 上开发时生成 Setup.exe 的各种方案,从交叉编译 NSIS 到纯浏览器构建,以及如何在没有 Windows 电脑的情况下测试结果。
- 为 Electron 应用创建 Windows 安装程序使用 Electron Packager 或 Forge 打包 Electron 应用,再把输出文件夹变成带向导、快捷方式和卸载程序的 Setup.exe,无需配置 electron-builder。