Windows 11中OpenSubKey()读取注册表键失效的问题咨询
解决Windows 11当前版本无法通过PowerShell打开指定注册表键的问题
你的代码在Windows 11新版本失效,大概率和注册表视图的默认行为变更或注册表重定向有关,以下是具体分析和解决方案:
核心问题分析
你调用[Microsoft.Win32.RegistryKey]::OpenBaseKey时,第二个参数传入的0对应RegistryView.Default。这个视图会根据运行PowerShell的位数(32/64位)自动触发注册表重定向:
- 64位PowerShell默认访问64位注册表分支
- 32位PowerShell默认访问32位注册表分支(即
Wow6432Node下的内容)
Windows 11后续版本对注册表重定向的规则更严格,而Autodesk Revit 2019作为32位应用,其卸载注册表项大概率存在于32位分支,导致你用默认视图无法找到目标键。
解决方案
1. 明确指定注册表视图
直接指定要访问的注册表位数视图,避免默认重定向的影响:
$Path='SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall' $Key='Autodesk Revit 2019' # 尝试访问64位注册表分支 $localMachine64 = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Registry64) $subKey64 = $localMachine64.OpenSubKey("$Path\$Key") if ($subKey64) { Write-Host "成功打开64位注册表键:$($subKey64.Name)" } else { # 64位分支未找到,尝试32位分支 $localMachine32 = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Registry32) $subKey32 = $localMachine32.OpenSubKey("$Path\$Key") if ($subKey32) { Write-Host "成功打开32位注册表键:$($subKey32.Name)" } else { Write-Host "未找到目标注册表键,请手动检查注册表路径" } }
2. 验证注册表项是否存在
手动打开注册表编辑器(regedit),检查以下两个路径是否存在Autodesk Revit 2019子项:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\UninstallHKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
3. 确保足够权限
即使调整UAC级别,仍需以管理员身份运行PowerShell,确保拥有读取该注册表项的权限。
内容的提问来源于stack exchange,提问作者Gordon
相关产品推荐
相关产品推荐

