Keil MDK 新旧版本冲突:完整解决方案
文档日期:2026-10-13
适用场景:安装 Keil MDK(µVision)时提示「新旧版本冲突」/「已检测到旧版本」/ 无法完成安装,且找不到冲突原因。
—
一、遇到了什么问题
1.1 现象
安装新版 Keil MDK 时,安装程序提示存在新旧版本冲突,但用户翻遍电脑也找不到「冲突」到底在哪里——旧版看起来已经卸载了,C 盘默认路径C:\Keil_v5也早就不存在了。
1.2 根本原因
旧版 Keil 卸载不干净。Windows 的卸载程序只删掉了主程序文件,却留下了两类"尾巴",导致新版安装程序误判「旧版本仍然存在」:
| 残留类型 | 具体内容 | 导致的问题 |
|---|---|---|
| 残留安装目录 | D:\Program Files\Keil_v5(空壳,仅剩 2 个文件) | 安装程序检测到目录存在,误判"已安装" |
| 残留注册表项 | HKCU\SOFTWARE\Keil(旧版 µVision5 全套配置)HKLM\SOFTWARE\WOW6432Node\Keil\Products | 旧版配置未清除,与新版本冲突 |
| 残留旧驱动 | KEIL - Tools By ARM USBDevice(2017 年版) | 次要因素,可能引发驱动冲突 |
1.3 为什么"找不到冲突原因"
两个关键盲点:
- 安装路径不在默认位置—— Keil 装在了D 盘(
D:\Program Files\Keil_v5),而不是默认的C:\Keil_v5,按默认路径去找自然找不到。 - 残留非常隐蔽—— 主程序
UV4.exe和TOOLS.INI其实已经被卸载了,只剩一个 6.6MB 的空壳目录 + 注册表里的配置项,不仔细扫描根本发现不了。
二、如何定位问题(排查方法)
排查思路是四个维度并行扫描,逐一排除:
2.1 扫描文件目录(常见安装路径)
$paths= @("C:\Keil_v5","C:\Keil","D:\Program Files\Keil_v5","D:\Keil_v5","$env:LOCALAPPDATA\Arm","$env:LOCALAPPDATA\Keil_v5","$env:APPDATA\Keil","C:\ProgramData\Keil")foreach($pin$paths){if(Test-Path$p){Write-Output"EXISTS :$p"}}关键发现:D:\Program Files\Keil_v5仍然存在。
2.2 扫描注册表
$keys= @("HKCU:\SOFTWARE\Keil","HKCU:\SOFTWARE\ARM","HKLM:\SOFTWARE\Keil","HKLM:\SOFTWARE\ARM","HKLM:\SOFTWARE\WOW6432Node\Keil","HKLM:\SOFTWARE\WOW6432Node\ARM")foreach($kin$keys){if(Test-Path$k){Write-Output"EXISTS :$k"}}关键发现:HKCU\SOFTWARE\Keil和HKLM\SOFTWARE\WOW6432Node\Keil存在残留。
2.3 列出已安装程序
Get-ItemProperty"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*","HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"|Where-Object{$_.DisplayName-match"Keil|MDK|ARM|uVision"}|Select-ObjectDisplayName,DisplayVersion,InstallLocation2.4 分析残留内容
确认D:\Program Files\Keil_v5目录里只剩:
UV4\PackInstaller.exe(v1.4.0.49)UV4\xerces-c_3_0.dll- 一个空的
ARM目录(内含隐藏的只读目录ARM\Packs\.Web)
结论:主程序已卸载,仅剩 6.6MB 空壳 + 注册表残留,这就是冲突的全部来源。
三、如何解决(完整步骤)
⚠️ 原则:先备份、再删除,全程可回滚。
第 1 步:备份(安全网)
$bak="D:\Keil_backup_20261013"New-Item-ItemType Directory-Path$bak-Force|Out-Null# 备份残留目录Move-Item"D:\Program Files\Keil_v5""$bak\Keil_v5_残留"-Force# 导出注册表备份reg export"HKCU\SOFTWARE\Keil""$bak\HKCU_Keil.reg"/y reg export"HKLM\SOFTWARE\WOW6432Node\Keil""$bak\HKLM_Keil.reg"/y第 2 步:删除当前用户注册表(无需管理员权限)
Remove-Item"HKCU:\SOFTWARE\Keil"-Recurse-Force第 3 步:删除系统级残留(需管理员权限)
这里遇到了关键的权限问题:D:\Program Files目录和HKLM注册表受系统保护,普通(非管理员)PowerShell 会话无法删除。
排查中发现的两个坑:
.Web目录带有只读属性,且属主是BUILTIN\Administrators。- 禁用沙箱(
dangerouslyDisableSandbox)并不能提升权限——它只是绕过沙箱,不会把用户令牌变成管理员。
正确做法:用 UAC 提权方式运行删除命令。先写一个删除脚本:
# 保存为 cleanup.ps1Remove-Item-LiteralPath"D:\Program Files\Keil_v5"-Recurse-Force-ErrorAction SilentlyContinueRemove-Item-LiteralPath"HKLM:\SOFTWARE\WOW6432Node\Keil"-Recurse-Force-ErrorAction SilentlyContinue再以管理员身份运行(会弹出 UAC 授权窗口,点击「是」):
Start-Processpowershell-Verb RunAs-Wait-ArgumentList `'-NoProfile','-ExecutionPolicy','Bypass','-File','D:\Keil_backup_20261013\cleanup.ps1'第 4 步:验证清理结果
Test-Path"D:\Program Files\Keil_v5"# 应为 FalseTest-Path"HKCU:\SOFTWARE\Keil"# 应为 FalseTest-Path"HKLM:\SOFTWARE\WOW6432Node\Keil"# 应为 FalseTest-Path"HKLM:\SOFTWARE\Keil"# 应为 False第 5 步:重新安装
用管理员身份运行新版安装包,安装到干净的目录(如D:\keil_v5),不再报冲突。
四、经验总结
4.1 关键要点
- 排查要覆盖非默认路径。软件不一定装在默认位置(本例 Keil 在 D 盘),排查时不能只查
C:\的默认路径,要扫遍所有磁盘分区。 - “卸载"≠"卸载干净”。卸载程序常有残留,判断是否干净要看:安装目录 + 注册表(
HKCU和HKLM的Software\下)+ 已安装程序列表。 - 注册表是冲突的高发区。
HKCU\SOFTWARE\<软件名>里的用户配置、HKLM\SOFTWARE\<软件名>或WOW6432Node里的产品信息,都是新版安装程序检测的目标。 - 删除前必须备份。目录用移动/复制备份,注册表用
reg export导出.reg,出问题可一键还原。
4.2 易踩的坑
| 坑 | 表现 | 正确应对 |
|---|---|---|
| 隐藏/只读目录删不掉 | .Web目录带ReadOnly属性,Remove-Item报「访问被拒绝」 | 先attrib -r -s -h清除属性,或直接提权删除 |
| 权限不足 | D:\Program Files、HKLM删除失败 | 需要管理员权限,用 UAC 提权 |
| 误以为禁用沙箱能提权 | 禁用沙箱后仍删不掉 | 沙箱 ≠ 权限,提权必须走 UAC |
| 新版目录结构变化 | 编译器不在ARM\BIN而在ARM\ARMCLANG\bin | 判断安装是否完整时按新版结构检查 |
4.3 可复用的排查思路(通用模板)
遇到「软件安装冲突」类问题,按下面顺序排查:
1. 看报错文案 → 判断是"已存在旧版"还是"配置冲突" 2. 扫文件目录(默认路径 + 所有磁盘分区) 3. 扫注册表(HKCU + HKLM + WOW6432Node) 4. 查已安装程序列表 5. 定位残留后:备份 → 清理(目录 + 注册表)→ 验证 → 重装4.4 清理完成后的验证清单
- 残留目录已删除
HKCU\SOFTWARE\Keil已删除HKLM\SOFTWARE\WOW6432Node\Keil已删除- 备份已保留在
D:\Keil_backup_20261013\ - 新版 Keil 5.39 已正确安装到
D:\keil_v5(主程序 + Arm Compiler 6.21 + 调试器驱动齐全)
附:本次操作的技术细节备忘
- 操作系统:Windows(当前用户非管理员令牌运行)
- 旧版残留:
D:\Program Files\Keil_v5(6.6MB 空壳) - 新版安装:Keil MDK 5.39,位于
D:\keil_v5 - 备份位置:
D:\Keil_backup_20261013\(含目录 + 2 个.reg文件) - 提权关键命令:
Start-Process powershell -Verb RunAs -Wait