Notepad++ 本身不会被 Windows 防火墙拦截,真正被拦的是它调用的外部程序(如 python.exe、gcc.exe)或脚本解释器;防火墙按 .exe 路径而非编辑器做规则,需通过 wf.msc 为具体可执行文件添加出站/入站白名单。

nppexec 插件执行的 python.exe、gcc.exe、node.exe 等),或是你用它编辑的脚本文件(如 test.py)双击运行时触发的解释器。
如果你看到“程序被阻止”弹窗、命令行窗口一闪而过、或者终端里提示“拒绝访问”“连接被关闭”,那不是 Notepad++ 的问题,而是它背后那个真实干活的可执行文件被防火墙盯上了。
为什么 Notepad++ 启动 Python 脚本会被防火墙拦截?
Windows 防火墙按进程(.exe)做规则,不是按编辑器。当你在 Notepad++ 里点“运行 → 启动 Python 脚本”,实际执行的是:python.exe(或 py.exe)加载你的 .py 文件。防火墙只认 python.exe 这个路径,不认识 notepad++.exe。
- 常见现象:点击运行后没反应,或弹出“Windows 安全中心”提示“是否允许此应用进行网络通信?”
- 关键判断:打开任务管理器 → 查看“详细信息”页 → 找到正在运行的
python.exe或cmd.exe,右键 → “打开文件所在位置”,确认是不是你预期的解释器路径(如C:\Python39\python.exe) - 注意:如果用的是 Microsoft Store 版 Python,路径类似
C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.3568.0_x64__qbz5n2kfra8p0\python.exe,这种路径默认被防火墙严格限制,必须手动添加
如何给 Python / GCC / Node.js 添加防火墙白名单?
推荐用 wf.msc 创建基于程序路径的出站规则(因为编译/解释通常要联网下载包、查更新、发 telemetry),比在安全中心勾选更稳定、不依赖应用名识别。
- 按
Win + R,输入wf.msc回车,以管理员身份打开“高级安全 Windows 防火墙” - 左侧面板 → 右键“出站规则” → “新建规则…”
- 选择“程序” → 下一步 → 选“此程序路径” → 点“浏览”,精准定位到你的
python.exe(或g++.exe、node.exe) - 动作选“允许连接” → 配置文件至少勾选“专用”(家庭/办公局域网)→ 命名如
Python_Outbound_Private - 若该工具还需被远程调用(如用 Notepad++ 启动本地 Flask 服务并从浏览器访问),则同样方式再建一条“入站规则”,指向同一
.exe
Notepad++ 自带插件(如 NppExec)执行命令时的防火墙坑
NppExec 是通过创建子进程调用外部命令,防火墙照样按最终 .exe 拦截。但这里容易踩两个隐形坑:
-
NppExec默认用cmd.exe中转,而系统自带的cmd.exe通常已被放行;但如果你在脚本里写了start python test.py,实际启动的是新python.exe实例 —— 它仍需单独放行 - 某些便携版 Python 或 MinGW 工具链解压在
D:\tools\python\python.exe这类非标准路径,Windows 安全中心的“允许应用”列表根本找不到它,必须走wf.msc手动指定路径 - 如果用了
PowerShell替代cmd(例如powershell -c "python .\test.py"),得额外为powershell.exe添加出站规则,且注意区分System32\WindowsPowerShell\v1.0\powershell.exe和SysWOW64下的 32 位版本
验证是否生效 & 容易忽略的细节
加完规则别急着关窗口,先做两件事:
- 重启你正在用的 Notepad++(不是仅关闭标签页,是彻底退出进程),否则旧的子进程可能还在缓存中
- 在
wf.msc左侧点“出站规则”,在右侧列表里找到你刚建的规则,确认状态是“启用”,且“配置文件”列显示已勾选对应网络类型 - 最常被忽略的一点:如果你在公司域环境,规则里“域”配置文件没勾选,而电脑当前连的是企业内网(自动识别为“域”网络),那这条规则根本不会生效 —— 即使你在“专用”里打了勾也没用
- 临时验证法:在 Notepad++ 里运行一个简单命令,比如
ping -n 1 baidu.com,如果能返回 IP 就说明出站通了;再试python -c "import http.server; http.server.HTTPServer(('127.0.0.1', 8000), http.server.SimpleHTTPRequestHandler).serve_forever()",然后浏览器访问http://127.0.0.1:8000,能打开就说明入站也 OK
防火墙规则是按进程路径硬绑定的,换一个 Python 版本、升级 Node.js、甚至重装 MinGW,路径变了就得重配。别指望一次设置管一辈子。


















