Schlüssel aus Win.Registry löschen

  • VB.NET

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

    Schlüssel aus Win.Registry löschen

    Moin Moin zusammen,

    bezugnehmend auf den Thread "Richtig auf die Registry zugreifen" hab ich ein Problem.
    Ich versuche momentan unter HKEY_LOCAL_MACHINE einen Schlüssel / Wert zu löschen wo ich jedoch immer auf einen Fehler laufe.
    (Auch als fertige Exe-File mit Adminrechten geht es nicht, gleicher Fehler)

    Mein Code:

    VB.NET-Quellcode

    1. Imports Microsoft.Win32
    2. Public Class Form1
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. Dim Key As RegistryKey
    5. Key = Registry.LocalMachine
    6. Key = Registry.LocalMachine.OpenSubKey("SOFTWARE\Policies\Microsoft\Windows\GWX", True)
    7. ' Funktioniert auch so nicht
    8. ' Key = Registry.LocalMachine.OpenSubKey("SOFTWARE\Policies\Microsoft\Windows\GWX", RegistryKeyPermissionCheck.ReadWriteSubTree, Security.AccessControl.RegistryRights.Delete)
    9. Key.DeleteSubKey("DisableGwx", True)
    10. End Sub
    11. End Class


    Die Fehlermeldung: Der angeforderte Registrierungszugriff ist unzulässig.

    Kann mir da jemand vielleich von Euch bei weiterhelfen?
    Danke und Grüße,

    samson
    Nein! Doch! OHH!

    samson schrieb:

    unzulässig
    Starte mal das Programm als Administrator.
    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!
    Ev. reichen die Adminrechte auch nicht aus. Zur Fehlersuche:
    Welches OS?
    Versuch mal das ganze über die Cmd oder Powershell zu machen, wenn es dort funktioniert liegt das Problem im Code und nicht in den Rechten.


    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Moin Moin zusammen,

    geht nicht als Administrator, hab ich schon getestet.
    Betreffende Betriebssysteme sollen Windows 7 32/64, Windows 8 32/64 und Windows 8.1 32/64 sein.
    Interessanter weise kann ich jedoch einen Schlüssel anlegen, aber diesen nicht mehr löschen.

    @Mokki Was meinst du mit "Versuch mal das ganze über die Cmd oder Powershell zu machen,..."
    Steh da grad auf der Leitung.
    Nein! Doch! OHH!
    Wenn man es mit der cmd machst ist es glaub regedit als Befehl oder so ähnlich. Und versuch darüber die Änderungen zu machen. Wenn das geht liegst am VB.NET Code und nicht an den Rechten. Hoffe das war besser erklärt....

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    @Mokki danke... ja :)
    Naja,.. ich kann die Änderung generell machen,... cmd / regedit fordert Adminrechte,...
    Wenn ich aber die fertige exe Datei als Admin ausführ, macht er es dennoch nicht.
    Hier mal der gesamte Code...
    Ist ja kein geheimnis ;)

    Spoiler anzeigen

    Code und Form1

    VB.NET-Quellcode

    1. Imports Microsoft.Win32
    2. Public Class Form1
    3. Dim value As String
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. Try
    6. If CDbl(value) = 1 Then
    7. My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\GWX\", "DisableGwx", value, RegistryValueKind.DWord)
    8. Else
    9. My.Computer.Registry.LocalMachine.DeleteSubKey("HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\GWX\DisableGwx")
    10. End If
    11. My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\GWX\", "DisableGwx", value, RegistryValueKind.DWord)
    12. MsgBox("Änderung erfolgreich durchgeführt. Bitte PC bei gelegenheit neu starten.")
    13. MsgBox("Das Programm wird nun beendet")
    14. Application.Exit()
    15. Catch ex As Exception
    16. MsgBox("Fehler beim setzen des Registrierungsschlüssels! Sie müssen das Programm als Administrator starten!")
    17. End Try
    18. End Sub
    19. Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click
    20. Application.Exit()
    21. End Sub
    22. Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
    23. If CheckBox1.Checked Then
    24. RadioButton1.Enabled = True
    25. RadioButton2.Enabled = True
    26. End If
    27. End Sub
    28. Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged
    29. value = CStr(1)
    30. Button1.Enabled = True
    31. End Sub
    32. Private Sub RadioButton2_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton2.CheckedChanged
    33. value = CStr(0)
    34. Button1.Enabled = True
    35. End Sub
    36. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    37. End Sub
    38. Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click
    39. Process.Start("http://www.dsw-foto.de")
    40. End Sub
    41. End Class


    Ich würde schon gerne dem User der das verwendet, die Möglichkeit einräumen, es nachträglich wieder zu aktivieren.
    Vielleicht findet sich ja jemand, der hier noch was dazu sagen kann ;)
    Danke schon mal und Grüße
    samson
    Nein! Doch! OHH!

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

    @Mokki Danke für den Hinweis, stimmt, ist von den Testungen her noch ein überbleibsel, hab ich geändert,... :whistling:
    was die MsgBox angeht, hab gerade mal gegoogled... bin jetzt völligst verwirrt,... Was ist der neue Befehl?
    Der hier?

    VB.NET-Quellcode

    1. MessageBox.Show("Nachricht", "Titel")

    Nein! Doch! OHH!

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

    samson schrieb:

    Der hier?


    Jo genau. Hier ist nochmal ne Liste: Böses aus VB6/VB2003 - und die richtigen VB.NET-Alternativen

    Edit:

    samson schrieb:

    My.Computer.Registry.LocalMachine.DeleteSubKey("HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\GWX\DisableGwx")


    dürfte auch nicht gehen... mit My.Computer.Registry.LocalMachine ist er ja schon bei HKEY_LOCAL_MACHINE

    Und außerdem ist des glaub ich kein Subkey sondern nen Value...

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Mokki schrieb:

    Jo genau. Hier ist nochmal ne Liste: Böses aus VB6/VB2003 - und die richtigen VB.NET-Alternativen


    Danke dafür... Werd ich mir mal zu gemüte führen...

    Mokki schrieb:

    dürfte auch nicht gehen... mit My.Computer.Registry.LocalMachine ist er ja schon bei HKEY_LOCAL_MACHINE

    Und außerdem ist des glaub ich kein Subkey sondern nen Value...


    Das wäre die Frage, wie kann ich den Value löschen bzw. den kompletten "GWX" Schlüssel inkl. Inhalt?
    Ich hab 3 tage nur gegoogled und probiert,... nichts funktionierendes gefunden...
    Das ich Adminrechte brauche, ist mir ja bewusst, da ich ja den "Current_User" verlasse...
    Die Frage bleibt dennoch ... WIE?
    ich versuch noch ein wenig... vielleicht hat ja noch jemand eine Idee,...
    Danke schon mal für Eure / Deine Hilfe!

    LG samson
    Nein! Doch! OHH!
    @Mokki Genau darum geht es ;) Es soll mit dem Registrierungsschlüssel verhindert werden, das Win10 installiert wird.
    Damit kann man dauerhaft die Meldung ausschalten. (Upgrade-Icon im Systray)
    Um das man aber später doch wieder aktivieren kann, weil man es doch machen möchte... Soll eben das "delete" mit rein ;)
    Nein! Doch! OHH!
    Ja hab ich verstanden ich meinte ob es nicht mit

    VB.NET-Quellcode

    1. My.Computer.Registry.LocalMachine.DELETVALUE("\SOFTWARE\Policies\Microsoft\Windows\GWX\DisableGwx")

    gehen würde(ich hab auch den Pfad angepasst).

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread