Schreiben in Registry - kein Fehler, Eintrag wird erstellt, ist aber im Reg-Editor nicht sichtbar?

  • Im Normalfall vermeide ich die Arbeit mit der Registry, und wenn ich es dann doch mal nutze, eigentlich nur lesend. Nun wollte ich aber selbst einen Eintrag erstellen:


    Folgendes Bsp.

    AutoIt
    #RequireAdmin
    
    $iSucc = RegWrite('HKEY_LOCAL_MACHINE\SOFTWARE\BugFix', 'Test', 'REG_SZ', 'Mein-Wert')
    MsgBox(0, 'RegWrite', "$iSucc --> " & $iSucc & @LF & "#Error:  " & @error)


    Ich starte das Skript, die Benutzerkontensteuerung fragt an - ich bestätige und Regwrite wird laut Return-/Errorwert auch erfolgreich durchgeführt.

    In der Registry ist aber keine Änderung sichtbar! :huh:

    Aber ein RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\BugFix', 'Test') zeigt, dass der Wert tatsächlich eingetragen wurde. :/

    Weder ein Aktualisieren, noch ein Neustart des Reg-Editors veranlassen diesen, die Änderung anzuzeigen.


    Ist das bei euch ebenso? Ich finde das schon recht verwirrend.


    EDIT:

    Auch nach einem PC-Neustart ist der Wert abfragbar, aber nicht im Reg-Editor sichtbar.


    EDIT#2

    Ich habe es gefunden. Obwohl ich explizit NICHT den 64-Bit Zweig angegeben habe, wird ungefragt dorthin geschrieben. Das ist natürlich Mist.

    Wie kann ich dann definieren, dass nicht im 64-Bit Zweig geschrieben werden soll?

    Laut Hilfe dürfte das nicht passieren:

    When running on 64-bit Windows if you want to write a key or value specific to the 64-bit environment you have to suffix the HK... with 64 i.e. HKLM64.

  • Versuche mal ohne #RequireAdmin.


    Hatte das gleiche problem wenn ich es mit Admin ausführe beim angemeldeten User, wurde der eintrag nicht angelegt.

    Ohne Admin wurde es dann im key-Pfad angelegt.

    Ich bin auf dem Kriegsfuß mit der Rechtschreibung, meistens gewinnt sie.

  • OK, ich werde mich nie mit der Registry anfreunden.


    Wenn ich im Editor den Schlüssel, wie eigentlich gewünscht, erstelle, ist er dort sichtbar - kann aber nicht gelesen werden! <X Dann frage ich mich aber: Wozu existieren dort Unmengen von Einträgen, wenn diese gar nicht gelesen werden können!!

    Ich bin der festen Überzeugung, als die in Redmond sich den Reg-Scheiß ausgedacht haben, waren sie ständig bekifft. Nun merken sie, dass das Rotze ist und versuchen durch immer neue Verbiegungen das Teil am Laufen zu halten. Irgendwann haben wir 20 GB-Registrydaten und 10 GB OS.

  • Ich konnte deinen Fehler nachvolziehen.


    Nach dem HKLM noch die 64 einfühgen, dann sollte es gehen.


    AutoIt
    #RequireAdmin
    
    $iSucc = RegWrite('HKLM64\SOFTWARE\BugFix', 'Test', 'REG_SZ', 'Mein-Wert')
    MsgBox(0, 'RegWrite', "$iSucc --> " & $iSucc & @LF & "#Error:  " & @error)

    Ich bin auf dem Kriegsfuß mit der Rechtschreibung, meistens gewinnt sie.

    Einmal editiert, zuletzt von sugus ()

  • Das mit dem lesen vom Schlüssel funktioniert bei mir.


    AutoIt
    $Var1 = RegRead("HKLM64\SOFTWARE\BugFix", "Test")
        MsgBox(0, "", $Var1)

    Ich bin auf dem Kriegsfuß mit der Rechtschreibung, meistens gewinnt sie.

  • Kurz zusammengefasst wie ich es verstanden habe:

    • Dein Skript wird als x86-Programm ausgeführt?
    • Du findest deinen Eintrag nicht unter HKLM\SOFTWARE\BugFix?
    • Stattdessen steht er unter HKLM\SOFTWARE\WOW6432Node\BugFix?

    Falls ja dann liegt das Problem an einem Missverständnis.

    Du schreibst, dass er deinen Eintrag in den x64-Zweig geschrieben hat (ich vermute du meinst WOW6432Node damit?).

    Es ist jedoch genau andersherum:

    • HKLM\SOFTWARE ist der 64 Bit-Zweig
    • HKLM\SOFTWARE\WOW6432Node ist der 32 Bit-Zweig

    Und mit der Info wird dann auch klar wie man die AutoIT-Hilfe interpretieren muss: HKLM64 gibt man an, wenn man von einem x86-Skript aus NICHT in WOW6432Node schreiben möchte.

  • Nach dem HKLM noch die 64 einfühgen, dann sollte es gehen.

    Ich will ja gerade keinen 64er Schlüssel einfügen.

    Das war nur ein Test mit meinen Werten. Tatsächlich geht es um Einstellungen für die Borland Database Engine. Gibt es noch immer, wird zwar seit fast 20 Jahren nicht mehr weiterentwickelt, ist aber wie viel alte Software dadurch auch nicht verschlimmbessert worden. 8o

    Ich brauche dafür bestimmte Treiber und Spracheinstellungen, die in der Registry hinterlegt sein müssen. Vor 20 Jahren wusste noch niemand von kommendem Schlüssel "..Wow6432Node". Also möchte ich die Einträge so anlegen, wie sie vor 20 Jahren erwartet worden.

    Da ich das auf mehreren PC ändern muss, hätte ich es gern automatisiert - das Skript dafür habe ich schon 2007 geschrieben. Habe es gerade syntaktisch überarbeitet und wollte testen, dabei ist mir das aufgefallen.

    Notfalls halt doch Handarbeit. :whistling:

  • Falls ja dann liegt das Problem an einem Missverständnis.

    Du schreibst, dass er deinen Eintrag in den x64-Zweig geschrieben hat (ich vermute du meinst WOW6432Node damit?).

    Es ist jedoch genau andersherum:

    HKLM\SOFTWARE ist der 64 Bit-Zweig
    HKLM\SOFTWARE\WOW6432Node ist der 32 Bit-Zweig

    Und mit der Info wird dann auch klar wie man die AutoIT-Hilfe interpretieren muss: HKLM64 gibt man an, wenn man von einem x86-Skript aus NICHT in WOW6432Node schreiben möchte.

    OK, das bringt Klarheit. Dann habe ich das tatsächlich völlig entgegengesetzt interpretiert.

    Danke für die Aufklärung. (Trotzdem mag ich die Registry nicht :rofl:)

  • BugFix

    Hat das Label von [ offen ] auf [ gelöst ] geändert.
  • Vor 20 Jahren wusste noch niemand von kommendem Schlüssel "..Wow6432Node". Also möchte ich die Einträge so anlegen, wie sie vor 20 Jahren erwartet worden.

    Das macht im Grunde auch WOW6432Node.
    Für ein x86-Programm (egal welches) wird die Registry so dargestellt wie du es möchtest - alle Eintragungen zu Software findest du auch in HKLM\Software.

    Daher funktioniert dein RegRead ja auch entsprechend.


    Damit sich diese Einträge jedoch nicht mit denen der x64-Programme vermischen haben die in der Registry den extra Zweig WOW6432Node.
    Beim Starten von x86-Programmen wird dieser lediglich auf HKLM\Software gemappt.

  • Es ist jedoch genau andersherum:

    HKLM\SOFTWARE ist der 64 Bit-Zweig
    HKLM\SOFTWARE\WOW6432Node ist der 32 Bit-Zweig


    Wusste ich auch nicht. Dachte auch das der zweig WOW6432Node ein 64 Bit ist.

    Habe wieder etwas dazugelernt.

    Ich bin auf dem Kriegsfuß mit der Rechtschreibung, meistens gewinnt sie.

  • Damit sich diese Einträge jedoch nicht mit denen der x64-Programme vermischen haben die in der Registry den extra Zweig WOW6432Node.
    Beim Starten von x86-Programmen wird dieser lediglich auf HKLM\Software gemappt.

    Ja, mit dem Mapping ist es dann auch klar.


    Ich fühle mich gerade an ein Lied von Curd Jürgens erinnert (wird unter 50-Jährigen kaum bekannt sein):

    Sechzig Jahre und kein bisschen weise,

    ...

    ...

    Und doch sechzig Jahr' davon entfernt.


    ;)

  • Damit besteht nur noch das Problem, daß der Eintrag nicht in Regedit angezeigt wird.

    Das könnte am Regeeditor selbst liegen, den gibt es leider auch mehrmals in 64bit und in 32bit.

    Eventuell wird der Eintrag ja angezeigt wenn der richtige regedit gestartet wird,

    denn der Eintrag exisitiert ja unter den 32bit Einträgen, also müsste er auch angewzeigt werden

    in der 32bit Version des Regeditors.

    Versuch es doch mal mit diesem, falls er auf deinem System dort vorhanden ist.


    C:\Windows\SysWOW64\regedit.exe


    Das müsste auch im Taskmanager ersichtlich sein ob die 32bit Variante aktiv ist oder die 64bit-Version.


    Hoffentlich hilft dir das weiter.

    Und ja ich hasse die Windows-Versionen >= Vista ebenfalls, seit der Zeit, weiß kein Schwein mehr wo seine Dateien wirklich auf der Festplatte rumgeistern, dasselbe mit den Registryeinträgen.

    Diese dämliche Pfadverbiegerei macht alles undurchschaubar vermutlich auch für Microsoft selbst.

    Sie sollten ma besten wieder ein ganzes System von Anfang bis Ende neuentwickeln, statt den ganzen Verschlimmbesserungen.


    Grüsse Tuxedo

  • Damit besteht nur noch das Problem, daß der Eintrag nicht in Regedit angezeigt wird.

    Er wird ja angezeigt, nur hatte ich dort (Zweig WOW6432Node) zuerst nicht gesucht, da ich diesen Zweig als 64-bit interpretiert hatte.


    Das ist in etwa adäquat mit dem schönen Satz:

    "Jetzt, wo ich weiß wie es geht, verstehe ich auch die Gebrauchsanleitung." :rofl:

  • Meine endgültige Lösung:

    Ich habe den Schlüssel (mit allen Unterschlüsseln/Werten) jetzt von Hand im WOW6432Node erstellt. Den ganzen Zweig habe ich als *.reg exportiert. Hier wird dann auch der komplette Schlüsselname angezeigt.

    Da ich weiß, dass die Ziel-PC alle 64-bit sind, kann ich die Installation mit Ausführen der *.reg - Datei durchführen. Da kann ich mir mein Skript sparen.

  • Willst Du noch verwirrter werden?


    mach mal auf einen x64 Windows eine Konsole auf: <cmd>

    gehe auf c:\windows\sysWOW64

    und jetzt gib start cmd ein


    Was kommt raus: eine Konsole im 32Bit-Modus


    Auch hier hast die das SysWOW64 - nein das ist nicht die neue Version von World of Warcraft - hier sind die 32Bit Teile!!!


    lg

    Racer

  • Schön, dass es diesen Thread gibt. Ich habe das mit WOW6432Node auch falsch verstanden :rofl:

    Ich würde es gerne etwas verständlicher in der Hilfe darstellen. Den genauen Wortlaut muss ich mir noch überlegen.

    Folgende Infos würde ich bei RegRead, RegWrite, usw. ergänzen


    HKLM\SOFTWARE: ist der 64 Bit-Zweig

    HKLM\SOFTWARE\WOW6432Node: ist der 32 Bit-Zweig


    32bit Programm
    HKLM\SOFTWARE\...: HKLM\SOFTWARE\WOW6432Node... Zweig wird verwendet

    HKLM64\SOFTWARE\...: HKLM\SOFTWARE\... Zweig wird verwendet

    64bit Programm

    HKLM\SOFTWARE\...: HKLM\SOFTWARE\... Zweig wird verwendet

    HKLM64\SOFTWARE\...: HKLM\SOFTWARE\... Zweig wird verwendet


    Passt das so?