在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
感谢任何帮助。
答案 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 中提取给定注册表路径中的所有/所有值。