2011-01-13 7 views
2

Innerhalb VB6 ich den folgenden Code verwendet haben, um hinzuzufügen, zu RegistryVB6 Registrierungsschlüssel Wert Problem

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

Es einen Schlüssel erstellt, aber in der folgenden Position:

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

Statt:

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

Jede Hilfe wird geschätzt.

+0

Wow6432Node? wow :-D – peenut

Antwort

0

Es sieht so aus, als ob Sie ein 64-Bit-Betriebssystem haben und eine 32-Bit-Anwendung (x86) ausführen, die von der Windows-Funktion "Windows On Windows" (WOW) verarbeitet wird. Grundsätzlich können Sie ein x86-Programm auf einem x64 Windows-Betriebssystem ausführen. x86-Programme haben normalerweise ihre eigene Registrierungsschlüssel-Struktur (dh die Wow6432Node) und ihre eigenen Programmdateien Ordner (dh. Program Files (x86)). Sie können versuchen, etwas wie this verwenden, die WinAPI-Hooks verwendet. Dadurch können Sie das Problem umgehen und direkt auf den gewünschten Schlüssel schreiben. Ich bin mir allerdings nicht sicher, ob Windows Sicherheitsmaßnahmen implementiert hat, die x86-Anwendungen daran hindern, in x64-Teile der Registrierung zu schreiben. (Ich kann nicht sehen, warum es würde.)

0

Sie können Shell C:\Windows\System32\cscript.exe, die die x64-Version ist.

Zur Info: Die x86-Version ist C:\Windows\SysWOW64\cscript.exe

0

Als erstes würde ich mit WScript.Shell stoppen und zu diesem Registrierungszugriffsklasse wechseln: http://www.planetsourcecode.com/vb/scripts/ShowCode.asp?txtCodeId=70915&lngWId=1

Es ist ein wenig verwirrend auf den ersten Einsatz, aber es ist solide und bietet integrierte Unterstützung für den Zugriff auf 64-Bit-Registrierungseinträge anstelle des umgeleiteten Wow6432Node. Sie können dies einfach tun, indem Sie den gewünschten Zugriff in der .Path Methode der Klasse festlegen. Hier ist ein nicht getestet Beispiel:

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

Sie können dann ein For Each Variante verwenden In objHKLMStartup alle/alle Werte in dem angegebenen Registrierungspfad zu extrahieren.