RegistryKey - Existenz Prüfen mit keiner Methode möglich?

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    RegistryKey - Existenz Prüfen mit keiner Methode möglich?

    Hallo,
    Ich versuche gerade zu überprüfen ob ein Registrykey existiert oder nicht.

    Leider habe ich irgendwie keinen Erfolg , es wird irgendwie immer was falsches ausgegeben.

    Ich habe das hier probiert:

    VB.NET-Quellcode

    1. If Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run\TestSchlüssel", False) Is Nothing Then MessageBox.Show("Der Registrykey existiert nicht!") Else MessageBox.Show("Der Registrykey existiert!")



    .Getvalue habe ich auch probiert , funktioniert ebenso nicht.

    Gibt es keine Methode die es zuverlässig & richtig prüfen kann?

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

    Läss sich bestimmt noch optimieren, aber im Prinzip sollte es funktionieren:

    VB.NET-Quellcode

    1. Dim autorunKeyPath As String = "Software\Microsoft\Windows\CurrentVersion\Run"
    2. Dim autorunRegKey As RegistryKey = Registry.CurrentUser.OpenSubKey(autorunKeyPath)
    3. Dim meinAppKeyName As String = "TestAnwendung"
    4. Dim keyNameGefunden As Boolean = False
    5. If autorunRegKey IsNot Nothing Then
    6. Debug.WriteLine("autorunRegKey Exists")
    7. For Each regKeyName As String In autorunRegKey.GetValueNames
    8. If regKeyName.ToUpper = meinAppKeyName.ToUpper Then
    9. keyNameGefunden = True
    10. End If
    11. Next
    12. If keyNameGefunden Then
    13. Debug.WriteLine(meinAppKeyName & " -> " & autorunRegKey.GetValue(meinAppKeyName).ToString)
    14. Else
    15. Debug.WriteLine(meinAppKeyName & " nicht gefunden.")
    16. End If
    17. Else
    18. Debug.WriteLine("autorunRegKey Is Nothing")
    19. End If


    EDIT: Das ganze als eigenstädige Funktion:

    VB.NET-Quellcode

    1. Private Function RegKeyNameExists(ByVal hive As RegistryHive, _
    2. ByVal path As String, _
    3. ByVal keyName As String) As Boolean
    4. Dim regKey As RegistryKey
    5. Select Case hive
    6. Case RegistryHive.CurrentUser
    7. regKey = Registry.CurrentUser.OpenSubKey(path) ' CurrentUser
    8. Case RegistryHive.LocalMachine
    9. regKey = Registry.LocalMachine.OpenSubKey(path) ' LocalMachine
    10. Case Else
    11. ' Throw New ArgumentException("Nur HKLM und HKCU sind erlaubt")
    12. Return False
    13. End Select
    14. If regKey Is Nothing Then Return False ' Schlüssel nicht vorhanden
    15. For Each regKeyName As String In regKey.GetValueNames()
    16. If regKeyName.Trim.ToUpper = keyName.Trim.ToUpper Then Return True ' Gefunden
    17. Next
    18. Return False ' Nicht gefunden
    19. End Function

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

    Hi
    @xtts02: String-Vergleiche solltest du mit der StringComparer-Klasse durchführen oder mit String.Equals (passende Überladung verwenden):

    VB.NET-Quellcode

    1. String.Equals("a", "b", StringComparison.InvariantCultureIgnoreCase)

    @Topic: Das geht auch einfacher. Hier ein Beispiel:

    VB.NET-Quellcode

    1. Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey("name")


    Wenn key Nothing ist, existiert der Registry-Schlüssel nicht, ansonsten schon.

    Gruß
    ~blaze~