Navicat 16 不支持任务完成后自动关机,因其无系统权限调用 shutdown.exe 且无任务完成回调机制;必须通过外部批处理脚本封装备份与关机逻辑,并以管理员身份在任务计划中配置“不管用户是否登录都要运行”和“使用最高权限运行”。

Navicat 16 本身不提供“任务完成后关机”的功能,它只负责生成或触发数据库操作;自动关机必须由操作系统级工具承接,且需确保 Navicat 任务已真实执行完毕再触发关机——否则容易在备份中途断电。
为什么不能直接在 Navicat 里配关机
Navicat 16 没有系统权限调用 shutdown.exe 或监听任务完成事件。它的「自动运行」仅导出作业(.ntb)或脚本(.bat),不带回调钩子、不发信号、不写状态文件。所谓“定时任务完成后关机”,本质是两个独立动作的串接:先让 Navicat 脚本跑完,再由外部机制判断它结束了,最后执行关机命令。
推荐做法:用批处理脚本串联备份与关机
Navicat 导出的 backup_script.bat 默认不带结束通知,需手动包裹一层逻辑来捕获退出码并延时关机。关键点如下:
- 导出脚本时务必勾选「生成批处理文件」和「使用绝对路径」,否则
backup_script.bat可能写入错误目录或找不到连接配置 - 新建一个封装脚本(如
run_backup_then_shutdown.bat),内容类似:
@"C:\path\to\backup_script.bat"
if %errorlevel% == 0 (
timeout /t 10 /nobreak >nul
shutdown /s /f /t 0
) else (
echo Backup failed with error %errorlevel%. Not shutting down.
)
其中 timeout /t 10 是缓冲等待,防止 Navicat 进程尚未完全释放句柄就关机;shutdown /s /f /t 0 强制立即关机(/f 确保终止所有程序)
- 该脚本必须以管理员身份运行,否则
shutdown会被拒绝(错误码 0x5) - 不要把关机命令直接塞进 Navicat 导出的原始脚本里——它可能被多次调用,或用于调试,关机应是可选行为
Windows 任务计划中如何安全调度关机脚本
把上面的 run_backup_then_shutdown.bat 交给 Windows 任务计划程序时,以下三项不设对,关机就会失败或提前触发:
- 「不管用户是否登录都要运行」必须勾选,否则锁屏后脚本启动但
shutdown无权执行 - 「使用最高权限运行」必须勾选,否则即使脚本跑通,
shutdown /s也会因 UAC 被拦截(日志中报错 0x80070005) - 「起始于(可选)」字段填脚本所在目录的绝对路径(如
C:\navicat_tasks\),否则timeout和shutdown可能因环境变量缺失而异常退出
若想更稳妥,可在脚本开头加一句 whoami /groups | findstr "S-1-16-12288" >nul || echo This script must run as high integrity level & pause & exit /b 1,显式校验管理员权限。
容易被忽略的临界问题
Navicat 备份脚本执行时间不确定:大库可能耗时几十分钟,而 timeout /t 10 显然不够;若用 shutdown /s /t 300(5 分钟后关机),又怕备份卡死导致误关。真正可靠的方案是让脚本主动轮询备份文件时间戳或检查 Navicat 日志末尾是否出现 Backup completed successfully,再触发关机——但这已超出批处理能力,需改用 PowerShell 或 Python 实现。简单场景下,宁可多等几分钟,也不要牺牲数据完整性。











