You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBScript无法读取HKCR\CLSID下部分子键,是否与32/64位注册表差异有关?

问题原因与解决方案

1. WOW64注册表重定向机制是真实存在的

64位Windows系统为了兼容32位程序,设计了注册表重定向机制:

  • 32位程序默认访问32位注册表分支,所有访问HKEY_LOCAL_MACHINE\SOFTWARE的请求都会被自动重定向到HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node
  • 64位程序默认访问原生64位注册表分支,无重定向

HKCR同样存在该差异:HKCR是HKLM\Software\Classes和HKCU\Software\Classes的合并视图,32位程序访问HKCR时会自动重定向到HKLM\SOFTWARE\WOW6432Node\Classes,因此无法读取到64位程序注册的CLSID条目,你列出的无法识别的CLSID均为64位应用(包括64位OneDrive)在64位注册表分支注册的内容。

2. 区分32/64位注册表条目的方法

  • 64位原生CLSID存储路径:HKLM\SOFTWARE\Classes\CLSID\
  • 32位兼容CLSID存储路径:HKLM\SOFTWARE\WOW6432Node\Classes\CLSID\

你用系统默认的64位注册表编辑器(regedit.exe)查看条目时,如果该条目同时存在于两个路径下,即为32位程序注册的兼容条目,仅存在于原生路径下即为64位条目。

3. 解决VBScript无法读取的方案

方案1:强制使用64位脚本宿主运行

64位Windows系统内置两个版本的VBScript运行环境:

  • 32位宿主:C:\Windows\SysWOW64\wscript.exe/cscript.exe
  • 64位宿主:C:\Windows\System32\wscript.exe/cscript.exe

直接调用64位宿主运行你的脚本,即可直接读取到64位注册表下的所有CLSID条目。

方案2:32位脚本中指定访问64位注册表

如果你必须在32位环境下运行脚本,可以修改StdRegProv的初始化参数,强制指定访问64位注册表分支,将代码中创建oReg的行替换为:

dim oReg: set oReg = GetObject("winmgmts:{impersonationLevel=impersonate,Architecture=64}!\\.\root\default:StdRegProv")

4. 你现有代码的其他错误

你当前的代码还有两处明显错误,也会导致运行失败:

  • 正则表达式写法错误:{在正则中是特殊字符需要转义,你要匹配前缀的规则应该写为re.Pattern = "^\{04271989-C4D2-.+",原写法既没有转义{,*的用法也不符合正则语法,无法正确匹配目标CLSID。
  • 读取值的方法错误:System.IsPinnedToNameSpaceTree是DWORD类型,你使用的GetExpandedStringValue是读取可扩展字符串的方法,应该替换为GetDWORDValue才能正确获取数值。

5. 其他可能的原因

如果修改后仍然无法读取,可排查权限问题:HKCR下的系统级CLSID修改需要管理员权限,普通用户仅拥有只读权限,运行脚本时需要右键选择「以管理员身份运行」才能执行写入操作。

内容的提问来源于stack exchange,提问作者JamesA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:36:04