以下是为 Mac 版 Navicat Premium 16/17 设计的 精准删除一级 Key 并重置试用期 的完整 Shell 脚本:
#!/bin/bash
# ---------- 终止 Navicat 进程 ----------
echo "终止 Navicat 进程..."
pkill -9 "Navicat Premium" || echo "Navicat 未运行"
# ---------- 清理应用支持目录 ----------
NAVICAT_SUPPORT_DIR=~/Library/Application\ Support/PremiumSoft\ CyberTech/Navicat\ CC/Navicat\ Premium
echo "删除应用支持目录隐藏文件: $NAVICAT_SUPPORT_DIR"
rm -rf "$NAVICAT_SUPPORT_DIR"/.* 2>/dev/null
# ---------- 处理偏好设置文件 ----------
PLIST_FILE=~/Library/Preferences/com.navicat.NavicatPremium.plist
echo "解析偏好设置文件: $PLIST_FILE"
# 提取所有一级 Key(匹配4空格缩进+32位哈希),并去除前导空格
# 此处感谢大佬 yhan219 指出 grep -a 参数避免跳过二进制检查,解决 intel 芯片无法匹配问题
KEYS_TO_DELETE=$(/usr/libexec/PlistBuddy -c "Print" "$PLIST_FILE" | grep -Eoa "^\s{4}[0-9A-F]{32}" | tr -d ' ')
if [[ -z "$KEYS_TO_DELETE" ]]; then
echo "未找到需要删除的 Key"
else
# 循环删除所有一级 Key
while IFS= read -r key; do
echo "删除 Key: $key"
/usr/libexec/PlistBuddy -c "Delete :$key" "$PLIST_FILE" 2>/dev/null
done <<< "$KEYS_TO_DELETE"
fi
# ---------- 重启 Navicat ----------
echo "启动 Navicat..."
open -a "Navicat Premium"
echo "试用期重置完成!"
脚本功能说明
-
终止进程
- 强制关闭所有正在运行的 Navicat 进程,避免文件占用问题 。
-
清理隐藏文件
- 删除
~/Library/Application Support
目录下的隐藏文件(如.xxxx
),这些文件存储了试用期的加密标识 。
- 删除
-
精准删除一级Key
- 使用
grep -Eoa "^\s{4}[0-9A-F]{32}"
严格匹配 以4个空格开头 的32位哈希 Key(即 Plist 中的顶级 Key),避免误删嵌套 Key 。-a
强制搜索包含二进制数据的文件,兼容 intel 芯片 mac。
- 使用
-
重启应用
- 自动重新启动 Navicat,触发试用期重置逻辑 。
使用方法
- 将脚本保存为
reset_navicat.sh
- 赋予执行权限:
chmod +x reset_navicat.sh
- 运行脚本:
./reset_navicat.sh
扩展:定时任务配置(可选)
参考 网页,可通过 launchctl
设置自动重置:
- 创建定时任务描述文件
reset.navicat.premium.trial.period.plist
:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <!-- 1.此处定义的是定时任务的名称,之后可用于搜索或停止该任务,建议与文件名一致即可 --> <string>reset.navicat.premium.trial.period</string> <key>ProgramArguments</key> <array> <!-- 2.修改为你的 reset_navicat.sh 脚本的绝对路径 --> <string>/path/to/reset_navicat.sh</string> </array> <!-- 在加载该文件时就执行任务,如果不需要可以删掉或改为false,调试阶段建议打开,以便查看脚本执行结果 --> <key>RunAtLoad</key> <false/> <!-- 在指定时间执行任务 --> <key>StartCalendarInterval</key> <dict> <!-- 3.下面表示每周一中午12点执行任务,可以修改为你想要的时间段执行任务 --> <key>Weekday</key> <!-- 0/7=周日, 1=周一...6=周六 --> <integer>1</integer> <key>Hour</key> <integer>12</integer> <!-- 12点执行 --> <key>Minute</key> <integer>0</integer> </dict> <!-- 运行日志,请以实际为准,调试阶段建议打开,以便查看脚本执行结果 --> <key>StandardOutPath</key> <!-- 4.运行日志,修改为你的实际想要输出的日志路径 --> <string>/path/to/log/reset_navicat.log</string> <!-- 错误日志,请以实际为准,调试阶段建议打开,以便查看脚本执行结果 --> <key>StandardErrorPath</key> <!-- 5.错误日志,修改为你的实际想要输出的日志路径 --> <string>/path/to/log/reset_navicat_error.log</string> </dict> </plist>
⚠️注意: 如果配置了 StandardOutPath 和 StandardErrorPath,建议创建指定目录,且目录需要当前用户有写权限,避免找不到目录或者无写权限导致自动执行失败。
mkdir -p /path/to/log
- 配置与加载任务:
# 将 reset.navicat.premium.trial.period.plist 复制到 ~/Library/LaunchAgents 文件夹中,当前用户登录后便会自动加载该定时任务 cp reset.navicat.premium.trial.period.plist ~/Library/LaunchAgents/reset.navicat.premium.trial.period.plist # 加载定时任务,如果没有报错则任务就加载成功了,会按照计划执行重置脚本,如果上面开启了加载即执行任务和任务日志输出,此时可以去查看日志文件,获取脚本执行情况 launchctl load -w ~/Library/LaunchAgents/reset.navicat.premium.trial.period.plist # 如果要调整 plist 文件或是停止任务,请执行以下命令后再进行调整 launchctl unload -w ~/Library/LaunchAgents/reset.navicat.premium.trial.period.plist
注意事项
- 兼容性:已验证适用于 Navicat 16/17 的 macOS 版本。
- 安全性:脚本仅操作试用标识文件,不会影响数据库连接配置 。
- 合法性:请遵守软件许可协议,推荐购买正版 。
如需 Windows 脚本,可参考搜索结果中的注册表清理方案(如删除 Registration17XCS
键值)。
评论区