2011-01-13 4 views
2

В VB6 я использовал следующий код для добавления в реестр,VB6 реестра Значение Проблема

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

Wow6432Node? wow :-D – peenut

ответ

0

Похоже, это потому, что у вас 64-разрядная ОС, и вы используете 32-разрядное (x86) приложение, которое обрабатывается Windows «Windows On Windows» (WOW). В принципе, он позволяет запускать программу x86 на x64 ОС Windows. Обычно программы x86 имеют свою собственную структуру ключей реестра (то есть Wow6432Node) и их собственную папку программных файлов (то есть Program Files (x86)). Вы можете попробовать использовать что-то вроде this, в котором используются WinAPI-перехватчики. Это может позволить вам обойти проблему и написать прямо на нужный вам ключ. Хотя, я не уверен, что Windows имеет меры безопасности, которые предотвращают приложения x86 для записи в x64 части реестра. (Я не понимаю, почему это было бы.)

0

Вы можете установить оболочку C:\Windows\System32\cscript.exe, которая является версией x64.

FYI: версия х86 C:\Windows\SysWOW64\cscript.exe

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]) 

Вы можете использовать Для каждого варианта В objHKLMStartup извлечь любые/все значения в данном пути реестра.

Смежные вопросы