☰
Keil MDK 新旧版本冲突:完整解决方案
2026/10/15 15:34:28 网站建设 项目流程

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 为什么"找不到冲突原因"

两个关键盲点:

  1. 安装路径不在默认位置—— Keil 装在了D 盘(D:\Program Files\Keil_v5),而不是默认的C:\Keil_v5,按默认路径去找自然找不到。
  2. 残留非常隐蔽—— 主程序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,InstallLocation

2.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 会话无法删除。

排查中发现的两个坑:

  1. .Web目录带有只读属性,且属主是BUILTIN\Administrators。
  2. 禁用沙箱(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 关键要点

  1. 排查要覆盖非默认路径。软件不一定装在默认位置(本例 Keil 在 D 盘),排查时不能只查C:\的默认路径,要扫遍所有磁盘分区。
  2. “卸载"≠"卸载干净”。卸载程序常有残留,判断是否干净要看:安装目录 + 注册表(HKCU和HKLM的Software\下)+ 已安装程序列表。
  3. 注册表是冲突的高发区。HKCU\SOFTWARE\<软件名>里的用户配置、HKLM\SOFTWARE\<软件名>或WOW6432Node里的产品信息,都是新版安装程序检测的目标。
  4. 删除前必须备份。目录用移动/复制备份,注册表用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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询