必须用navicatcmd.exe而非navicat.exe,因其不依赖GUI、专为无界面设计;需手动安装命令行工具、设任务为“只在用户登录时运行”、.nbi路径纯英文、加-log参数看日志,且执行用户须已手动登录初始化会话。
不能用 navicat.exe 直接跑自动化脚本——它依赖 gui 消息循环,后台无桌面会话时会卡在凭据解密或 opengl 初始化阶段,静默退出。真正能稳定执行的只有 navicatcmd.exe,且必须满足权限、路径、会话三重前提。
为什么 navicatcmd.exe 是唯一可行入口
navicat.exe 是 Qt GUI 主程序,所有连接凭据(包括已保存的密码)都绑定在用户登录会话的 Credential Manager 和桌面环境里;一旦任务在无交互会话(如 Session 0)运行,它连密码都解不开,更别说建立数据库连接。navicatcmd.exe 是独立命令行进程,不加载任何 UI 组件,专为计划任务设计,只解析 .nbi 批处理作业并调用底层驱动执行。
- 安装时必须手动勾选「Command Line Tools」,否则
navicatcmd.exe根本不会释放到磁盘 - 默认路径是
C:\Program Files\PremiumSoft\Navicat Premium 16\navicatcmd.exe,不要依赖 PATH 环境变量 - 验证是否存在:CMD 中运行
where navicatcmd,无输出说明没装对,需重装并勾选组件
Windows 计划任务必须设为“只在用户登录时运行”
勾选「不管用户是否登录都要运行」看似合理,实则让进程落入 Session 0 隔离区,navicatcmd.exe 无法访问当前用户的加密凭据,直接报 Failed to decrypt password 或静默退出。
- 任务属性 → “常规”页 → 勾选「只在用户登录时运行」,且取消勾选「不存储密码」
- 该用户必须已手动登录过一次(哪怕只是远程桌面连进去再断开),确保桌面会话和密钥环完成初始化
- “起始于(可选)”字段必须填
navicatcmd.exe所在目录,例如C:\Program Files\PremiumSoft\Navicat Premium 16\,否则.nbi内部相对路径全部失效
.nbi 文件路径不能含中文、空格或全角符号
Navicat 17.x 对 .nbi 路径解析仍有缺陷,路径中出现中文、空格(如 我的备份.nbi)会导致 Failed to load job file,错误提示极不明确,排查困难。
- 所有
.nbi文件必须存放在纯英文路径下,例如C:\NavicatJobs\daily_backup.nbi - Navicat Cloud 同步下来的作业也会继承原始路径,需手动导出再另存为合规路径
- 若用 PowerShell 动态生成带时间戳的文件名,确保变量替换后路径仍为 ASCII 字符,例如用
Get-Date -Format 'yyyyMMdd_HHmm',避免%date%在不同区域设置下格式错乱
日志是唯一可信判断依据,exit code 完全不可靠
navicatcmd.exe 成功或失败都返回 0,控制台不输出任何信息。你看到“任务已完成”,可能只是 .nbi 加载失败后静默跳过,备份根本没发生。
- 务必加
-log "C:\temp\navicatcmd.log"参数强制输出调试日志 - 日志路径需对执行账户有写权限:
C:\temp比%APPDATA%更稳妥,避免权限拒绝 - 日志里出现
Loading job file...表示路径正确;若直接结束且无后续内容,大概率是.nbi路径无效或损坏
最常被忽略的是:任务执行用户必须已手动登录过一次,且 .nbi 文件不能从云同步直接拿来用——这两点不满足,哪怕命令写得再对,也只会安静地什么也不做。


















