Regestry Key löschen

  • VB.NET

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

    Regestry Key löschen

    Hallo ^^

    ich habe diesen Code:
    Spoiler anzeigen

    Quellcode

    1. For Each SelItem As ListViewItem In lvAutostartReg.CheckedItems
    2. rtbMain.Text += "Lösche " + SelItem.Text + vbNewLine
    3. Using RegTyp As RegistryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)
    4. Dim Key64 As RegistryKey = RegTyp.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", False)
    5. For Each skName As String In Key64.GetValueNames
    6. If skName = SelItem.Text Then
    7. Try
    8. My.Computer.Registry.LocalMachine.DeleteSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run\" + SelItem.Text)
    9. Catch ex As Exception
    10. End Try
    11. Dim regkey As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run\" + SelItem.Text)
    12. If regkey Is Nothing Then
    13. rtbMain.Text += "Regestry Key nicht vorhanden" + vbNewLine
    14. rtbMain.Text += "Erfolgreich!!!" + vbNewLine
    15. Else
    16. rtbMain.Text += "Fehlgeschlagen" + vbNewLine
    17. End If
    18. End If
    19. Next
    20. End Using
    21. Next


    der soll mir ein Regestry Key löschen. Ich hab jetzt selber ein angelegt und den in meiner ListView angehackt. er findet ihn auch aber dann sagt er das er den Key nicht löschen kann weil er nicht existiert!?
    Wenn jemand eine Lösung weiß was an den Code falsch ist wäre ich dankbar wenn er mir helfen könnte ^^

    P.S: meine vermutung ist es, das er in dem Key den ich angebe nach einen unterschlüssel sucht und da wird er keine mehr finden. Kann das sein ?

    Danke
    Ist dieser

    nawiat schrieb:

    VB.NET-Quellcode

    1. RegistryView.Registry64
    tatsächlich ein 64-Bit-Key?
    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!
    Nicht getestet:

    VB.NET-Quellcode

    1. Dim keyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
    2. Dim entryNameToDelete = "Test"
    3. Using regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(keyPath, True)
    4. For Each entryName In regkey.GetValueNames
    5. If entryName.Equals(entryNameToDelete) Then
    6. regkey.DeleteValue(entryName)
    7. End If
    8. Next
    9. End Using

    geht leider immer noch nicht. Kann denke ich auch mal nicht gehen da es ein 64 Bit Schlüssel ist und der Code auf ein 32 Bit Schöüssel zugreifen will ^^

    Edit: hab jetzt mal statt DeleteSubKey mal DeleteValue genommen wegen dem Beitrag von @xtts02 geht aber leider auch noch nicht aber guter Hinweiß ^^

    xtts02 schrieb:

    Nicht getestet:

    VB.NET-Quellcode

    1. Dim keyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
    2. Dim entryNameToDelete = "Test"
    3. Using regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(keyPath, True)
    4. For Each entryName In regkey.GetValueNames
    5. If entryName.Equals(entryNameToDelete) Then
    6. regkey.DeleteValue(entryName)
    7. End If
    8. Next
    9. End Using



    @nawiat: Versuch mal folgenden Pfad: "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run"
    @Freenex

    der Code " Using regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(keyPath, True)" geht auf ein 32-Bit Key los. Da der Key den ich löschen will ein 64-Bit Key ist bringt es mir auch nichts in "Wow6432Node" zu suchen ^^


    Die Farbe Rot ist der Moderation vorbehalten -> Farbe angepasst
    -Artentus

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

    Die Windows-API wird auch unter alle 64 Bit-Versionen von Windows als Win32 bezeichnet. Die 32 Bit-Ausführungen sind dann immer unter WOW64 zu finden (WOW64 bedeutet "Windows on Windows 64").
    Zum Beispiel befinden sich im Ordner "System32" auf einem 64 Bit-Windows alle 64 Bit-Assemblies, die 32 Bit-Assemblies liegen in SysWOW64.

    Das ganze funktioniert dann so, dass eine 32 Bit-Assembly automatisch vom System auf die WOW64-Bereiche umgeleitet wird, während 64 Bit-Assemblies ganz normal zugreifen. Das gilt ebenso für die Registry.
    In .Net muss man hier nochmal speziell aufpassen. Die Compilereinstellung "AnyCPU" wird auf 64 Bit-Systemen als 64 Bit-Anwendung ausgeführt und auf 32 Bit-Systemen als 32 Bit-Anwendung, und dementsprechendend verhalten sie sich auch im Bezug auf die Registry. Soll eine Plattform speziell angesprochen werden, muss x64 (64 Bit) oder x86 (32 Bit) ausgewählt werden, allerdings ist AnyCPU in 99% aller Fälle die beste Wahl.