Benutzer mit den meisten Antworten
VB2005 Registy-Key auslesen auf x64

Frage
-
Hallo,
ich arbeite mit VisualBasic2005 in Verbindung mit WinXP-SP2-x64.
Ich habe mir ein kleines Programm geschrieben, dieses mir Registy-Key auslesen soll. Das Programm funktioniert auf einem normalen WinXP-SP2-x86-Rechner problemlos, nur mit der x64-Version habe ich meine Probleme.
Das Scriptteil lautet wie folgt:
Dim AKey As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Spheros\Softwareauflistung", False)
Public strtextdatei = AKey.GetValue("Textdatei", "Keine Angabe")
Public strAccessDatei = AKey.GetValue("Datenbank", "Keine Angabe")
Wenn ich die Variablen gleich fixiere mit:
Private strTextDatei As String = "C:\Daten\Test.txt"
Private straccessdatei As String = "C:\Daten\Accessdatenbank.mdb"
funktioniert es?
Da ich diese Variablen im kompletten Script brauche, habe ich die Ermittlung gleich an den Anfang des Scripts geschrieben.
Gibt es bei x64 eine andere Logig als bei x86?
Danke
Antworten
-
Hallo,
Ich habe mir ein kleines Programm geschrieben, dieses mir Registy-Key auslesen soll. Das Programm funktioniert auf einem normalen WinXP-SP2-x86-Rechner problemlos, nur mit der x64-Version habe ich meine Probleme.
Das Scriptteil lautet wie folgt:
Dim AKey As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Spheros\Softwareauflistung", False)
Da Du in einem VB Express Forum fragst, gehe ich davon aus, dass Dein Assembly als 'AnyCPU' kompiliert wird. Das heißt, unter Win64 wird Deine Anwendung als 64 Bit Prozess ausgeführt. Ferner gehe ich davon aus, dass der Wert, den Du auslesen möchtest, von einer fremden Anwendung erstellt wird, die als 32 Bit Prozess ausgeführt wird. In dem Fall leitet Windows die Zugriffe auf die Registry für diese Anwendung in einen speziellen Zweig 'HKLM\SOFTWARE\Wow6432Node' um. Folgende Änderung müsste also den gewünschten Wert liefern:
Dim AKey As RegistryKey If IntPtr.Size = 4 Then 'Assembly wird als x86/32 Bit Prozess ausgeführt: AKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Spheros\Softwareauflistung", False) Else 'Assembly wird als x64/64 Bit Prozess ausgeführt: AKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Wow6432Node\Spheros\Softwareauflistung", False) End If
Wenn es umgekehrt sein sollte, wird es schwieriger.
Registry Redirector
http://msdn.microsoft.com/en-us/library/aa384232(VS.85).aspxRegistry Keys Affected by WOW64
http://msdn.microsoft.com/en-us/library/aa384253(VS.85).aspx
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort vorgeschlagen Robert Breitenhofer Freitag, 20. August 2010 07:34
- Als Antwort markiert Robert Breitenhofer Donnerstag, 26. August 2010 16:00
Alle Antworten
-
Hallo,
Ich habe mir ein kleines Programm geschrieben, dieses mir Registy-Key auslesen soll. Das Programm funktioniert auf einem normalen WinXP-SP2-x86-Rechner problemlos, nur mit der x64-Version habe ich meine Probleme.
Das Scriptteil lautet wie folgt:
Dim AKey As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Spheros\Softwareauflistung", False)
Da Du in einem VB Express Forum fragst, gehe ich davon aus, dass Dein Assembly als 'AnyCPU' kompiliert wird. Das heißt, unter Win64 wird Deine Anwendung als 64 Bit Prozess ausgeführt. Ferner gehe ich davon aus, dass der Wert, den Du auslesen möchtest, von einer fremden Anwendung erstellt wird, die als 32 Bit Prozess ausgeführt wird. In dem Fall leitet Windows die Zugriffe auf die Registry für diese Anwendung in einen speziellen Zweig 'HKLM\SOFTWARE\Wow6432Node' um. Folgende Änderung müsste also den gewünschten Wert liefern:
Dim AKey As RegistryKey If IntPtr.Size = 4 Then 'Assembly wird als x86/32 Bit Prozess ausgeführt: AKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Spheros\Softwareauflistung", False) Else 'Assembly wird als x64/64 Bit Prozess ausgeführt: AKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Wow6432Node\Spheros\Softwareauflistung", False) End If
Wenn es umgekehrt sein sollte, wird es schwieriger.
Registry Redirector
http://msdn.microsoft.com/en-us/library/aa384232(VS.85).aspxRegistry Keys Affected by WOW64
http://msdn.microsoft.com/en-us/library/aa384253(VS.85).aspx
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort vorgeschlagen Robert Breitenhofer Freitag, 20. August 2010 07:34
- Als Antwort markiert Robert Breitenhofer Donnerstag, 26. August 2010 16:00