Navicat 试用期重置:navicat-key 一条命令清理注册表完整指南
【免费下载链接】navicat-keynavicat-key项目地址: https://gitcode.com/gh_mirrors/na/navicat-key
关键查询跑到一半,屏幕上弹出"试用期已结束",工作被打断。手动做 Navicat 试用期重置要打开 regedit、逐个翻注册表,繁琐还容易删错;navicat-key 一条命令就能解决,它自动清掉 Windows 注册表里的 Navicat 试用记录,15 天试用期立刻重新开始。
一、先定位:试用记录到底记在哪
Navicat 的试用状态像存在系统里的门禁打卡记录:每次启动都会写一笔"打卡",只要记录还在,重启就判定试用期已用完。记录分两处,都在当前用户区域 HKEY_CURRENT_USER 下:
| 位置 | 作用 |
|---|---|
HKEY_CURRENT_USER\Software\PremiumSoft\Data | 主记录:存放试用状态与到期时间 |
HKEY_CURRENT_USER\Software\Classes\CLSID各子项下的Info文件夹 | 散落记录:每个 CLSID 子项里各留的一份试用痕迹 |
Java 本身碰不了注册表,navicat-key 靠 libs 目录里的 jregistry 库经 JNI 调 Windows 系统 API 来删这两处,主逻辑源码不到 50 行,核心就是 deleteSubTree 这个方法:
private int deleteSubTree(RegistryKey parentKey, String subkeyName) { RegistryKey subkey = parentKey.getSubKey(subkeyName); if (subkey != null) { System.out.println("delete : " + subkey.getPath()); try { return parentKey.deleteSubTree(subkeyName); } catch (RegistryException re) { re.printStackTrace(); } } return 0; }逐行看它在做什么:
getSubKey先取出目标子键,确认它存在;- 存在就先打印
delete :加完整路径,屏幕上那串日志就是这里来的; - 再调
deleteSubTree把子键及其下所有子键整枝删除; - 子键不存在(比如上次已删过)就静默返回,不报错。
main 入口的逻辑更直白:先找到\Software\PremiumSoft删掉其Data子键,再进入\Software\Classes\CLSID遍历每个子项、逐个删掉里面的Info文件夹。两组脚印都抹掉,下次启动 Navicat 就会把你当新用户。
二、动手前 30 秒核查:清进程与验环境
删之前把这份核查清单过完,否则记录可能被重新写回:
- 关闭全部 Navicat 窗口,包括主窗口和连接管理窗口;
- 打开任务管理器(Ctrl+Shift+Esc),确认进程列表里没有残留的 navicat 进程,有就结束;
- 命令行执行
java -version,确认 JDK 为 8 或更高(本项目按 JDK 8 编译); - 先备份将要删除的两个注册表键,出问题可以双击导出的 .reg 文件还原:
reg export "HKEY_CURRENT_USER\Software\PremiumSoft" premiumsoft_backup.reg reg export "HKEY_CURRENT_USER\Software\Classes\CLSID" clsid_backup.reg三、一条命令重置:完整操作与逐条解读
navicat 试用期过期时照下面 4 条命令依次执行即可,这是 navicat-key 用法的标准流程:
git clone https://gitcode.com/gh_mirrors/na/navicat-key cd navicat-key javac -cp "libs/jregistry-1.8.3.jar" src/com/returncode/navicat/Registery.java java -Djava.library.path="libs" -cp "src;libs/jregistry-1.8.3.jar" com.returncode.navicat.Registery执行时屏幕上会发生什么:
- 第 1、2 条跑完,屏幕回到空白提示符,说明项目已落在当前目录;
- 编译那条命令跑完若无任何输出即成功,
src/com/returncode/navicat/下会多出Registery.class; - 最后一条命令跑起来时,
-Djava.library.path把本地库指向 libs,Java 在那里加载 reg.dll(32 位系统)或 reg_x64.dll(64 位系统)接通注册表; - 一切正常的话,屏幕会刷出以
delete : HKEY_CURRENT_USER\...开头的一串日志:第一行是PremiumSoft\Data主记录,后面每行对应一个被删的 CLSID...\Info 散落记录; - 最后重启 Navicat,出现"首次使用"欢迎页,试用期回到 15 天,整个过程不到 1 分钟。
四、卡住了?对着这张表自查
| 症状 | 原因 | 处理 |
|---|---|---|
| 跑完没有任何 delete 日志,重启 Navicat 仍提示过期 | Navicat 进程没关净,删除后注册表记录被重新写回 | 在任务管理器结束所有 navicat 进程后重跑;仍不行就重启电脑再试 |
UnsatisfiedLinkError: no reg in java.library.path | 找不到本地 DLL | 确认 reg.dll 与 reg_x64.dll 在 libs 目录,且-Djava.library.path指向 libs |
SecurityException: Access to the registry is not allowed | 权限不足 | 关闭当前命令行,右键以管理员身份运行,再执行最后一条命令 |
Unsupported major.minor version 52.0 | JDK 版本过旧 | 升级到 JDK 8 及以上,并检查 JAVA_HOME 指向新 JDK |
不管 navicat 注册表清理的范围怎么改,先记住一条:删前必备份。两条备份命令和动手前给的一样,先跑再删:
reg export "HKEY_CURRENT_USER\Software\PremiumSoft" premiumsoft_backup.reg reg export "HKEY_CURRENT_USER\Software\Classes\CLSID" clsid_backup.reg五、顺手改造:把它变得更好用
三个小升级,每个花不了几分钟:
1. 打包独立 JAR,以后免编译。src/META-INF/MANIFEST.MF已声明入口类,打一次包,之后直接-jar启动:
jar cfm navicat-key.jar src/META-INF/MANIFEST.MF -C src com/returncode/navicat/Registery.class java -Djava.library.path="libs" -jar navicat-key.jar2. 写个 reset.bat,双击即跑。放在项目根目录,taskkill负责强杀进程,2>nul让找不到进程时不报错:
@echo off taskkill /F /IM navicat.exe 2>nul cd /d %~dp0 java -Djava.library.path="libs" -jar navicat-key.jar echo 清理完成,可以重新打开 Navicat pause3. 给源码加日志,路径改可配置。Registery.java 不到 50 行,两处可以动:在deleteSubTree里把每次删除的路径和时间写进日志文件,方便回溯;或把两个目标路径抽成列表放进配置文件,适配不同版本的 Navicat 时只改配置。
从克隆到欢迎页,全流程不到 1 分钟。如果这套 Navicat 试用期重置流程确实帮到了你,不妨再动手:给它加个图形界面,或者配一个每 15 天自动执行的 Windows 计划任务,从此不用惦记"试用期已结束"的弹窗。下一个版本,就可以出自你手。
【免费下载链接】navicat-keynavicat-key项目地址: https://gitcode.com/gh_mirrors/na/navicat-key
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考