Auslesen der Registry

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Artentus.

    Auslesen der Registry

    Hi,

    ich versuche die Registry auszulesen. Mit dem nachfolgenden Coding lese ich zwei Variable aus, eine hat das Format REG_SZ, die andere das Format REG_BINARY:

    VB.NET-Quellcode

    1. Dim Subkey As String = "HARDWARE\DESCRIPTION\SYSTEM"
    2. Dim RegKey As RegistryKey = Registry.LocalMachine.OpenSubKey(Subkey)
    3. Dim RegValue As String
    4. RegValue = CStr(RegKey.GetValue("Identifier")) 'REG_SZ
    5. MsgBox(RegValue)
    6. RegValue = BitConverter.ToString(CType(RegKey.GetValue("Component Information"), Byte())) 'REG_BINARY
    7. MsgBox(RegValue)


    Wie man sieht, ist das mit dem Zuweisen der Values aus der Registry so eine Sache - man muss wissen, welches Format ein Value hat, um ihn richtig zuweisen zu können. Für die beiden Variablen hab ich mir das halt vorher mit REGEDIT angeschaut. Im allgemeinen Fall (wenn ich die Variablen mit GetValueNames auslese), weiß ich das aber nicht.

    Meine einfache Frage: wie kann ich denn in meinem Programm abfragen, welches Format ein Value hat? Ich habe zwar die Methode "RegKey.GetType" gefunden aber irgendwie werde ich da nicht schlau draus. wie ich den Valuename da eingeben soll! Die naheliegende Idee etwa

    RegKey.GetType("Identifier")

    funktioniert leider nicht!

    Kann mir jemand auf die Sprünge helfen?

    LG
    Peter

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Peter329“ ()

    Peter329 schrieb:

    RegKey.GetType("Identifier")
    Nimm Microsoft.Win32.RegistryKey, das hat eine GetType-Methode.

    VB.NET-Quellcode

    1. Dim reg = RegKey.OpenSubKey(SubRegKeyName).GetValue("DisplayName")
    2. MessageBox.Show(reg.GetType.ToString)


    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Erst mal herzlichen Dank für die Antwort!

    Ich bin jetzt ein bissl weiter gekommen und versuche nun einen Registry Wert vom Typ REG_MULTI_SZ in einen String auszugeben. Diese Registry Einträge enthalten eine Reihe von Strings die durch ein x'00 Byte voneinander getrennt sind.

    VB.NET-Quellcode

    1. Case Microsoft.Win32.RegistryValueKind.MultiString 'REG_MULTI_SZ
    2. RegValue = CStr(RegKey.GetValue(ValueName))


    Das liefert mir die Fehlermeldung:

    Ungültige Konvertierung von Typ String() in Typ String.

    Offensichtlich liefert .GetValue hier einen Array of Strings ... wie kann ich denn diesen Array zu einem einzigen String verketten?

    VB.NET-Quellcode

    1. Dim RegValueList As Object() = CType(RegKey.GetValue(ValueName), Object())
    2. For Each ValueElement In RegValueList
    3. RegValue &= ValueElement.ToString
    4. Next


    So klappt das zwar ... aber ich bin sicher, dass die Experten da eine viiiiieeeel einfachere Lösung wissen! :)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Peter329“ ()