我做的客户端,被自己电脑拦了
上周把桌面客户端打包出来,双击,弹窗:
智能应用控制已阻止可能不安全的应用。
而且——没有「仍要运行」这个按钮。
我第一反应是「那就是 SmartScreen 呗,点『更多信息』绕过」。找了一圈没找到绕过选项,才意识到拦住我的根本不是 SmartScreen,是 Windows 11 里另一个更狠的东西:智能应用控制(Smart App Control,SAC)。
这篇把整件事讲清楚:它为什么拦我、怎么确认是不是它、三种关闭方法、一个不注意就会踩的坑(关闭可能是不可逆的),以及为什么折腾半天,最终答案其实是「去给应用做代码签名」。
先说结论:为什么它拦我
我的客户端(YouAgent 桌面版)和它启动的后端进程,都没有做代码签名。
而 SAC 的规则就一句话:只放行「已签名且有信誉」或微软判定安全的程序,其余一律阻止。
它不像普通杀软弹个框让你选,它连选择都不给你。
SAC 和 SmartScreen,别搞混
这是最容易混的地方,我一开始也踩了这个坑:
| SmartScreen | 智能应用控制(SAC) | |
|---|---|---|
| 拦什么 | 下载/运行时的「未知发布者」 | 未签名 / 无信誉的程序 |
| 能不能单次放行 | 能(更多信息 → 仍要运行) | 不能,没有任何绕过选项 |
| 怎么关 | 一般不用关 | 得去 Windows 安全中心整体关掉 |
记住一个判断法:弹窗里出现「智能应用控制已阻止」这几个字的,就是 SAC。 没有「仍要运行」可点,不是你眼瞎。
为什么拦的是两个 exe?Electron 的老问题
有个细节挺多人困惑:弹窗里会冒出 youagent-backend.exe,看着像个陌生程序。
因为 Electron 应用不是”一个 exe”:外壳 YouAgent.exe 会另外拉起一个后端进程 youagent-backend.exe。而 Windows 的安全机制是按「每个 exe」单独判定的 —— 所以后端会单独再被拦一次。
只放行外壳,不够。 两个都是未签名,两个都拦。
先确认:你的机器到底有没有 SAC
SAC 不是每台机器都有。它只在这几种情况下默认启用:
- Windows 11,版本 22H2 或更高;
- 而且是全新安装(clean install)的 Windows 11;
- 不是企业托管、也不是 S 模式。
如果你的系统是下面这些情况,大概率压根没有 SAC:
- 从 Windows 10 升级上来的;
- 从更早的 Windows 11 升级上来的;
- Windows 10(完全没有这个功能)。
最快的判断方法:打开 Windows 安全中心,如果里面根本看不到「智能应用控制」这一项,说明你这台机器不拦你,后面都不用看了。
用命令确认状态
想确认得更准确一点,PowerShell 跑一行:
(Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\CI\Policy').VerifiedAndReputablePolicyState
返回值含义:
| 值 | 状态 |
|---|---|
0 |
关闭(Off) |
1 |
开启(On,正在强制拦截) |
2 |
评估模式(Evaluation) |
也可以用 citool.exe -lp(管理员命令提示符),看 VerifiedAndReputableDesktop 是不是 Currently Enforced: True。
⚠️ 关闭之前,先看这一段:可能是不可逆的
这是整篇最需要停下来看一眼的地方。
关闭 SAC 在旧版本上是「永久」操作:点了关闭,就再也开不回来了,除非重置或重装系统。
是否可逆,取决于你的系统更新级别:
- 2026 年那批累积更新之前(KB5079391 → KB5086672,或 KB5083769):
关闭是永久的,无法再开启,只能重置/重装系统。 - 这些更新之后:
关闭后可以在同一个界面重新选回「开启 / 评估」,不用重装。前提是 Windows 安全中心应用版本 ≥ v1000.29554。
查看版本:Windows 安全中心 → 右上角设置(齿轮)→ 关于。
如果版本低于 v1000.29554,关掉就是回不去了 —— 动手前三思。
方法一:图形界面关闭(大多数人用这个)
- 开始菜单搜「Windows 安全中心」打开(或点任务栏右下角盾牌图标);
- 左侧选 应用和浏览器控制;
- 点 智能应用控制设置;
- 在 开启 / 评估 / 关闭 里,选 关闭;
- 确认(可能会弹 UAC 管理员确认);
- 关掉后,双击应用就能跑了。
等价路径:设置 → 隐私和安全性 → Windows 安全中心 → 应用和浏览器控制 → 智能应用控制 → 关闭。
方法二:注册表 / .reg 文件(适合批量)
要给多台机器部署、或者想脚本化,就用注册表。
新建一个 DisableSAC.reg:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CI\Policy]
"VerifiedAndReputablePolicyState"=dword:00000000
(0 关,1 开,2 评估。)
需要管理员权限。 应用方式二选一:
- 双击这个
.reg文件 → 确认合并; - 管理员命令提示符里:
reg import C:\PathTo\DisableSAC.reg。
让它立刻生效(二选一):
citool.exe -r
或者直接重启。
验证:再跑一次 citool.exe -lp。
可选加固:如果怕 Defender 重启后又给你改回去,可以改
HKLM\SOFTWARE\Microsoft\Windows Defender下的SacLearningModeSwitch(DWORD)=0。注意:这一项在 software 配置单元里,别和上面的 system 单元搞混。
方法三:WinRE 离线修改(安全中心都进不去时)
这是最激进的一招,只在图形界面完全进不去、方法一二都不好使时用。
进 Windows 恢复环境(WinRE) 的命令提示符,离线改注册表:
reg load HKLMsac <系统盘>:\Windows\System32\config\SYSTEM
reg add HKLMsac\ControlSet001\Control\CI\Policy /v VerifiedAndReputablePolicyState /t REG_DWORD /d 0 /f
reg add HKLMsac\ControlSet001\Control\CI\Protected /v VerifiedAndReputablePolicyStateMinValueSeen /t REG_DWORD /d 0 /f
reg unload HKLMsac
reg load HKLMsac2 <系统盘>:\Windows\System32\config\SOFTWARE
reg add "HKLMsac2\Microsoft\Windows Defender" /v SacLearningModeSwitch /t REG_DWORD /d 0 /f
reg unload HKLMsac2
先确认系统盘符,并且先把系统盘的 BitLocker 挂起,否则改不动。
改完重启。
真正的答案:去做代码签名
上面三种方法都只是「让这一台放行」。
问题在于——你每一个用户,都得各自去关一次 SAC。 一个普通用户,看到「已阻止可能不安全的应用」,大概率直接就卸载了,根本不会去翻 Windows 安全中心。
所以对外分发,正确的做法是代码签名:
- SAC 和 SmartScreen 对已签名的应用友好得多;
- 持续用同一个签名身份发布,可以逐渐积累信誉,拦截提示会慢慢消失。
但签名这件事,有几个 2024 年之后的现实,得有心理预期:
- EV 和 OV 证书,都不再「秒过」SmartScreen,都要靠攒信誉;
- 证书私钥必须放在硬件里(USB Token 或云 HSM);
- 证书有效期封顶约 460 天,到期得换。
我的项目本身已经把签名流程准备好了(desktop/electron-builder.win.js),支持对接云 HSM 签名服务,配好这几个环境变量重新打包就行:
SIGNTOOL_PATH
SIGNTOOL_ACCESS_KEY
SIGNTOOL_ACCESS_SECRET
SIGNTOOL_CERT_CODE
(时间戳默认用微软的。)
几个高频问题
Q:能不能只放行我这一个应用,SAC 继续保护其他程序?
A:不能。 SAC 没有单应用例外,只能整体开或关。
Q:关完要重启吗?
A: 图形界面关一般立即生效;用 .reg 方式建议跑 citool.exe -r 或直接重启。
Q:关掉 SAC 有什么风险?
A: 会降低这台机器对未知恶意程序的防护——SAC 本来会拦下那些未签名的可疑程序。只建议在你自己知情、自己拥有的机器上操作。
速查表
| 目标 | 操作 |
|---|---|
| 关闭(图形) | Windows 安全中心 → 应用和浏览器控制 → 智能应用控制 → 关闭 |
| 查看状态 | citool.exe -lp,或读注册表 VerifiedAndReputablePolicyState |
| 立即生效 | citool.exe -r 或重启 |
| 关闭后能否再开 | 2026 更新后可逆;此前需重装系统 |
说到底,SAC 拦不拦你,其实是在问一个问题:你的应用,有没有一个让系统「信得过」的身份。
小范围自用,关掉它就行;想认真对外分发,代码签名这道坎,早晚都要过。










