VB6注册表键值问题

时间:2011-01-13 18:23:58

标签: vb6 registry key edit

在VB6中,我使用以下代码添加到Registry,

Dim x As Object
x = CreateObject("WScript.Shell")
x.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell", "MADNESS"

它创建了一个键,但是在以下位置:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell

而不是:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

看起来好像是因为你有一个64位操作系统并且你正在运行一个由Windows“Windows On Windows”(WOW)功能处理的32位(x86)应用程序。基本上,它允许您在x64 Windows操作系统上运行x86程序。 x86程序通常有自己的注册表键结构(即Wow6432Node)和它们自己的程序文件文件夹(即Program Files (x86))。您可以尝试使用使用WinAPI挂钩的this之类的东西。这可能允许您绕过问题并直接写入所需的密钥。虽然,我不确定Windows是否有安全措施阻止x86应用程序写入注册表的x64部分。 (我不明白为什么会这样。)

答案 1 :(得分:0)

你可以shell C:\Windows\System32\cscript.exe这是x64版本。

仅供参考:x86版本为C:\Windows\SysWOW64\cscript.exe

答案 2 :(得分:0)

首先,我将停止使用WScript.Shell并切换到此注册表访问类:http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=70915&lngWId=1

首先使用它有点令人困惑,但它很可靠并且提供了对访问64位注册表项而不是重定向Wow6432Node的内置支持。您只需在类的 .Path 方法中设置所需的访问权限即可。这是一个未经测试的例子:

Dim objRegistry as New UniRegistry
Dim objHKLMStartup as New UniRegistry

Set objHKLMStartup = objRegistry.Path([hKey Local Machine], "SOFTWARE\Microsoft\Windows\CurrentVersion\Run", [Registry: Read] + [Registry: WOW64 64-bit])

然后,您可以使用 For Each 变体在objHKLMStartup 中提取给定注册表路径中的所有/所有值。