Registry Wert auslesen funktioniert nicht

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von tboehmer.

    Registry Wert auslesen funktioniert nicht

    Hallo Forumuser,

    ich habe ein Problem mit Werten aus der Registry lesen.
    Und zwar versuche ich über folgenden Code einen Wert aus der Registry auszulesen.
    Sobald ich in den Ast HKLM\SOFTWARE\Classes\CLSID gehe funktioniert die Abfrage nicht mehr
    alle anderen Werte kann ich auslesen.

    VB.NET-Quellcode

    1. Public Function RegRead(ByVal Path As String) As String
    2. Dim ws As Object
    3. ws = CreateObject("WScript.Shell")
    4. RegRead = ws.RegRead(Path)
    5. End Function

    Mein Aufruf der Funktion ist:

    VB.NET-Quellcode

    1. RegRead("HKLM\SOFTWARE\Classes\CLSID\{7FF07B79-B555-4072-B882-6251ED7BF085}\LocalServer32\")

    Wenn ich diesen Wert auslesen will, den es gibt, kommt die Fehlermeldung:
    {"Ungültige Wurzel in Registrierungsschlüssel "HKLM\SOFTWARE\Classes\CLSID\{7FF07B79-B555-4072-B882-6251ED7BF085}\LocalServer32\".":Nothing}

    Kann mir jemand weiterhelfen?

    MfG
    Thomas

    P.S. Ich setze VB 2010 Express ein.
    Hallo Picoflop,

    danke für die schnelle Antwort.
    Das hatte ich auch gefunden und getestet funktioniert allerdings auch nicht!

    Hier kommt dann als Fehlermeldung {"Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."}

    VB.NET-Quellcode

    1. Dim MeinKey As RegistryKey
    2. Dim MeinName As String
    3. MeinKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Classes\CLSID\{7FF07B79-B555-4072-B882-6251ED7BF085}\LocalServer32")
    4. MeinName = MeinKey.GetValue("", "Error")
    5. MeinKey.Close()
    6. MessageBox.Show(MeinName)


    MfG
    Thomas
    Wenn du in der Registry bist siehst du in der linken Spalte die (ich nenns jetzt mal) Ordner. Rechts sind die Schlüssel (Keys) dazu.

    VB.NET-Quellcode

    1. MeinKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Classes\CLSID\{7FF07B79-B555-4072-B882-6251ED7BF085}\LocalServer32

    Ist links der "Ordner"

    VB.NET-Quellcode

    1. MeinName = MeinKey.GetValue("KEYNAME", "DEFAULTWERT")

    ist rechts der Keyname. Existiert der Key nicht bekommst du den Defaultwert den du bei GetValue mit übergibst.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Das sollte funktionieren. Allerdings sollst Du vorher noch prüfen, ob der Schlüssel existiert. Hier ein Beispiel:

    VB.NET-Quellcode

    1. Dim subPath As String = "Software\Test"
    2. Dim regKey As Microsoft.Win32.RegistryKey
    3. regKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(subPath, False)
    4. If regKey Is Nothing Then
    5. Debug.Print("Schlüssel ({0}) nicht vorhanden.", subPath)
    6. Else
    7. If regKey.ValueCount > 0 Then
    8. Debug.Print("(Standard): {0}", regKey.GetValue("", "-Leer-").ToString)
    9. Else
    10. Debug.Print("(Standard) hat keinen Wert")
    11. End If
    12. End If
    Hallo xtts02,

    funktioniert leider auch nicht mit der Fehlermeldung {"Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."} :(

    Hab allerdings die Überprüfungen erstmal weggelassen.

    Der Key ist aber da!
    Was ich komisch finde ist, das ich alle anderen Werte auslesen kann aber sobald ich in HKLM\Software\Classes\CLSID gehe funktioniert es nicht mehr!

    MfG
    Thomas

    tboehmer schrieb:

    Hab allerdings die Überprüfungen erstmal weggelassen.

    Clevere Entscheidung. Die sollen ja auch nur helfen, den Fehler einzugrenzen. Wer braucht sowas schon? Nur Loser!

    BTW: Zugriffe auf die Registry erfordern ggf höhere Rechte. Die hat deine Anwendung?

    BTW2:
    msdn.microsoft.com/en-us/libra…op/aa965884(v=vs.85).aspx
    For example, registry operations to the global store (HKEY_LOCAL_MACHINE\Software) are redirected to a per-user location within the user's profile known as the virtual store (HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software).

    Möglicherweise arbeitest du im virtuellen System?

    Registry virtualization is enabled only for the following:
    32-bit interactive processes.
    Keys in HKEY_LOCAL_MACHINE\Software.
    Keys that an administrator can write to. (If an administrator cannot write to a key, then the application would have failed on previous versions of Windows even if it was run by an administrator.)
    Hallo picoflop,

    ich habe das Problem gefunden!
    Er greift nicht auf den 64bit bit Ast der Registry zu sondern geht in HKLM\Software\Wow6432Node.
    Aber wie bringe ich dem Programm bei, das er unter HKLM\Software\Classes ohne Wow6432Node suchen soll?

    MfG
    Thomas