Registry schreiben in HKEY_LOCAL_MACHINE geht nicht

  • VB.NET

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von Mephisto.

    Registry schreiben in HKEY_LOCAL_MACHINE geht nicht

    Hi,

    ich will in den Pfad:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

    einen neuen Eintrag für den Autostart anlegen. Ich kriege keinerlei Fehlermeldung, der scheint diesen Wert also zu speichern. Wenn ich dann allerdings in diesen Ordner reingucke, finde ich den Eintrag nicht wieder. Rechtschreibfehler sind ausgeschlossen. Hier der Code zum schreiben:

    VB.NET-Quellcode

    1. Registry.SetValue(Registry.LocalMachine.ToString & "\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Penguinizor", CurDir.ToString, RegistryValueKind.String)


    Ich habe bereits Registry.LocalMachine.ToString durch den Wert als String ausgetauscht, hat allerdings nichts gebracht. Ebenfalls habe ich einen \ vor SOFTWARE weggenommen oder einen hinter Run eingefügt, hat auch nichts gebracht, dann kamen beide male Fehlermeldungen. Ich bin als Administrator angemeldet, Berechtigungen sollte ich also haben.

    Hat jemand eine Idee?
    Sowie ich das verstanden habe muss du den Wert erstmal erstellen bevor du ihm einen Wert zuweisen kannst.

    Erstellen kannst du einen mit

    VB.NET-Quellcode

    1. Dim Regkey As Microsoft.Win32.RegistryKey
    2. Dim subkey as String = 'Wie der key heißen soll
    3. Regkey = My.Computer.Registry.LocalMachine.CreateSubKey(subkey)


    Ich weiß jetzt leider gerad nicht wie man in einen vorhandenen Key was reinschreiben kann, werde aber mal dannach suchen.
    .SetValue erstellt automatisch den Schlüssel, falls der nicht existiert. Die Schlüsselstruktur besteht außerdem bereits vollkommen, da es ja der Windows Autostart Pfad ist :).

    Ich probiers morgen mal aus, danke für den Tipp. Ich denke aber, das wird nicht die Lösung sein.
    Hi,

    mit dem nachfolgendem Code prüfst du ob der Eintrag bereits vorhanden ist, ansonsten erstellst du einen neuen Registryeintrag unter Run, daß deine .exe startet:

    VB.NET-Quellcode

    1. Dim AppOrdner As String = Application.StartupPath
    2. Dim AppPfad As String = Application.ExecutablePath
    3. Dim AppExe As String = AppPfad.Replace(AppOrdner, "")
    4. If My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Test", AppOrdner & AppExe) IsNot Nothing Then
    5. My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Test", AppOrdner & AppExe)
    6. End If


    Ciao...
    :D keine Sorge, der Debugger ist mir durchaus geheuer. Habe alles nacheinander durchgeklickt, die einzelnen Schritte. Es liegt nicht an der Bedingung, der Pfad stimmt zu 100%, es sind keine Tippfehler drin, es wird keine Fehlermeldung ausgegeben. Trotzdem wird der Wert nicht geschrieben!
    Hast du Vista oder 7?? Da kann es sein, dass du keine Rechte hast. Starte das ganze mal als Admin. Aber eigendlich müsste da ein Fehler kommen....

    Sonst schreib halt in den Current_User, da startet das zwar nur bei dem aktuellen Benutzter, aber das reicht meistens.

    Alteran
    Hi,

    ich bin als Administrator angemeldet und habe die Benutzerkontrolle (UAC) komplett ausgeschaltet. Mit Rechten habe ich also kein Problem :).

    Ich muss das bei HKEY_LOCAL_MACHINE eintragen, da ich in den Optionen Autostart sowohl für alle als auch für den aktuellen Benutzer ermöglicht habe.
    Ich habe den Fehler entdeckt. Versuch diesen Code:

    VB.NET-Quellcode

    1. My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Test\", "Test", "Variable", RegistryValueKind.String)


    Fehler war eigentlich ganz einfach zu finden! Warum habe ich den nicht früher entdeckt? :thumbdown:
    Wenn das bei euch überall funktioniert, muss es bei mir ja am System liegen, bzw. an irgendwelchen speziellen Einstellungen. Vielleicht liegt es gerade daran, dass ich die UAC ausgestellt habe.

    @tourette: Dein Code unterscheidet sich im Prinzip nicht von meinem :). Falls doch, sag mir bitte den Unterschied, ich sehe ihn nämlich nicht. Funktioniert auf jeden Fall auch nicht.

    Danke trotzdem für die Tipps, ich suche weiter nach der Lösung.