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 (20. Januar 2022 um 10:20)

  • 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 20. Januar 2022 um 10:30

    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

    Einmal editiert, zuletzt von Tuxedo (20. Januar 2022 um 10:56)

  • 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?

  • Guten Abend.

    Tweaky: Dein Textvorschlag ist ja mittlerweile in der deutschen Hilfe gelandet, war aber für mich trotzdem nicht ausreichend verständlich, unter welchen Architektur-Umständen/-Kombinationen ein Registry-Eintrag gelesen werden kann oder nicht. Deshalb bastelte ich mir schnell ein Test-Skriptchen und kam zu einer lauffähigen Lösung.

    Hätte der letzte Absatz aus Beitrag #7 von AspirinJunkie vom Sinn her und vor allem der letzte Satz dort nach dem Doppelpunkt auch in der Hilfe gestanden, wäre das Thema für mich gleich klar verständlich gewesen, auch ohne Verweis auf die Microsoft-Website, die einen noch mehr verwirrt, auch weil dort beispielsweise Keys mit Tasten übersetzt wird.

    Wäre also schön und nett, wenn ihr diesen Absatz sinngemäß in die Hilfe für die Reg*()-Funktionen mit aufnehmen könntet.

    Gruß, fee

    Edit: Mein Zusatztext-Vorschlag aus dem Beitrag von AspirinJunkie zusammengeschustert:

    Das Skript wird als x86-Programm ausgeführt? Dann ist:

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

    HKLM64 ist demnach anzugeben, wenn von einem x86-Skript aus NICHT in WOW6432Node geschrieben werden soll.

    2 Mal editiert, zuletzt von fee (28. März 2023 um 18:45)