注册表残留是导致INS-35075或“产品已安装”错误的主因,必须手动清理HKEY_LOCAL_MACHINE\SOFTWARE\Oracle、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleService及OracleOraDB、HKEY_CURRENT_USER\SOFTWARE\Oracle、WOW6432Node\Oracle和Installer\Products中Oracle相关项,并提前备份注册表、创建还原点、终止oracle.exe/tnslsnr.exe/java.exe进程,再检查服务、环境变量及oci.dll等驱动文件。

注册表残留导致INS-35075或“产品已安装”错误
Oracle卸载后注册表残留是重装失败的最常见原因。安装程序在启动时会扫描HKEY_LOCAL_MACHINE\SOFTWARE\Oracle等路径,只要发现任意Oracle键值,就判定“已有同名组件”,直接报INS-35075或弹窗提示“产品已安装”。这不是误判——它真能读到旧配置,比如残留的ORACLE_HOME路径、监听器端口绑定信息、甚至已删除实例的SID注册项。
必须手动清理的注册表路径清单
官方deinstall.bat工具不会触碰以下位置,需人工定位删除:
-
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle(主键,含所有版本共用配置) -
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleService*(服务注册项,星号通配实际SID) -
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleOraDB*(11g/19c等Home服务项) -
HKEY_CURRENT_USER\SOFTWARE\Oracle(当前用户级配置,如SQL Developer连接历史) -
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Oracle(64位系统下32位兼容项) -
HKEY_CLASSES_ROOT\Installer\Products\*中名称含Oracle或Ora的子项(MSI安装包元数据)
清理前必须做的三件事
直接进regedit删键值风险极高,容易误删系统关键项。务必先执行:
- 以管理员身份运行
regedit,导出整个注册表为oracle-backup.reg(文件 → 导出 → 选择“全部”) - 创建系统还原点:控制面板 → 系统和安全 → 系统 → 系统保护 → 创建
- 确认所有Oracle进程已终止:
taskkill /f /im oracle.exe、taskkill /f /im tnslsnr.exe、taskkill /f /im java.exe
删完注册表还要检查服务与环境变量
注册表清干净了,不代表问题结束。残留服务项可能仍显示在services.msc里(状态为“已禁用”或“标记为删除”),它们会持续占用1521端口或干扰新监听器启动。执行:
- 用
sc queryex type= service state= all | findstr Oracle查残留服务名 - 对每个查到的服务名(如
OracleServiceORCL),运行sc delete OracleServiceORCL - 检查系统环境变量:
PATH中是否还有ORACLE_HOME\bin路径;ORACLE_HOME、ORACLE_SID变量是否还存在
最后别忘了C:\Windows\System32\oci.dll这类驱动文件——它们不随注册表删除而消失,但会被旧注册表项继续引用,造成后续软件(如Python cx_Oracle)加载失败。











