none
VB2005 Registy-Key auslesen auf x64 RRS feed

  • 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?

    Bild zur Frage

    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
    Mittwoch, 18. August 2010 16:26

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).aspx

    Registry 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
    Mittwoch, 18. August 2010 17:09

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).aspx

    Registry 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
    Mittwoch, 18. August 2010 17:09
  • Hallo,

     

    wirklich gerafft habe ich es nicht, aber ich habe mir Deine Scripthilfe abgeschieben und es funzt .....))

     

    Danke

    Freitag, 20. August 2010 12:01