In die Registry mit Regwrite schreiben liefert falsche Einträge

  • Hallo Zusammen,

    ich habe gerade das Problem, dass ich Silent etwas in die Registry für das Programm putty schreiben möchte.

    Bisher hatte ich das immer über den Importbefehl gemacht, hier kommt aber immer die Bestätigungsanfrage der Benutzerkontensteuerung.

    Der Import über die HKCUReg.au3 funktioniert leider nicht.

    AutoIt
    ---funktioniert nicht---
    
    #include <HKCUReg.au3>
    _HKCU_Import($file)
    AutoIt
    ---funktioniert , aber Benutzerkontensteuerung muss aktiv bestätigt werden --
    
    ;$sCommand01 = ('regedit.exe /s "' & @ScriptDir & '\bin\putty.reg"')
    ;_RunDOS($sCommand01)

    Mit dem Regwrite Befehl funktioniert das Grundsätzlich, aber die Werte stimmen nicht.

    Mit folgendem Code schreibe ich nun die Einträge in die Registry. Es wird die Reg Datei eingelesen und dann Zeilenweise eingespielt.

    Das Problem ist mir dann beim Öffnen von Putty aufgefallen. Hier hat der SSH Port nicht gestimmt.

    Korrekt wäre der Port 22, es kommt aber immer nur Port 16.

    Eintrag aus der exportierten Registry (wenn ich das wieder importiere funktioniert es)

    Eintrag in der Registry


    Wenn ich per Autoit Schreibe, kommt in der Registry folgendes an. Es wird ein aus Port 22 -> Port 16


    Könnte das Problem am Zeichensatz oder an der Formatierung liegen?

    Gibt es denn eine andere Möglichkeit den Import vorzunehmen?

    Danke

    Gruß gmmg

  • BananaJoe , das war mir auch schon aufgefallen, aber wie schreibe ich das denn im Script um?

    Es wird ja nur die exportierte Registry in ein Array gelesen und danach wieder zeilenweise geschrieben.

    Ich habe jetzt mal nur die PortNumber Zeile zum testen genommen. mit der Dec Funktion wird der Wert korrekt in die Registry geschrieben.

    Ob das jetzt für alle Werte so geändert werden muss ist mir noch nicht bekannt.

    AutoIt
    Funktioniert nicht
    ;RegWrite("HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\Blank", "PortNumber", "REG_DWORD", "00000016")
    ;RegWrite("HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\Blank", "PortNumber", "REG_DWORD", 00000016)
    
    Funktioniert
    RegWrite("HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\Blank", "PortNumber", "REG_DWORD", Dec("00000016",0))
    RegWrite("HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\Blank", "PortNumber", "REG_DWORD", Dec(00000016,0))

    Gruß gmmg

    2 Mal editiert, zuletzt von gmmg (15. März 2022 um 10:55)

  • Du schreibst einfach "16" in das DWORD (nicht dword:0000016), das sollte passen.

    Also z.B. RegWrite("PathInRegistry", "RegistryEntry", "REG_DWORD", "16")

  • Hallo Moombas,

    ja, das wäre eine Idee, aber hast du dir mal die angehängte Reg Datei angeschaut, da gibt es viele "Dword" Einträge, die müssen ja alle geschrieben werden. :)

    Bei dem Eintrag mit der PortNumber war mir der Fehler halt direkt aufgefallen, bei den anderen Einträgen, weiß ich das ja noch nicht.

    Mit der DEC Funktion schaut das im Vergleich beider Dateien (export aus der Registry) mit Notepad++ sehr gut aus.

    Einzig eine "REG_SZ" Zeile passt nicht mit dem Original überein, ist aber eventuell auch nicht relevant.

    Original

    per Autoit



    Gruß gmmg

    Einmal editiert, zuletzt von gmmg (15. März 2022 um 10:16)

  • Moin,

    wenn Du Dir den Auszug aus der Registry anschaust, siehst Du

    REG_DWORD  0x00000016 (22)

    Das heißt, Du kannst den Wert entweder hexadezimal als 0x16 oder dezimal 22 übergeben.

  • Velted, danke für deine Antwort. Für den einzelnen Wert ist das bereits geklärt. Das funktioniert ja auch mit der DEC Funktion.

    Code
    Dec(00000016,0))

    Ich möchte doch nun die ganzen Regdatei per Autoit wieder importieren bzw. schreiben und nicht nur den einzelnen Wert.

    Da müsste ich nun ja für alle Einträge entsprechende definitionen festlegen, dass will ich aber möglichst vermeiden :)

    Gruß gmmg

    Einmal editiert, zuletzt von gmmg (15. März 2022 um 10:52)

  • Mit der folgenden Anpassung des Scripts läuft der Import erstmal wie gewollt. Ich schließe das Thema.

    AutoIt
            If $dword[0] = 2 Then
               RegWrite(StringReplace($RegArray[$i],'"',''), StringReplace($RegArrayaSec[$a][0],'"',''), 'REG_DWORD', Dec(StringReplace(StringReplace($RegArrayaSec[$a][1],"dword:",""),'"',''),0))
            EndIf

    Gruß und Danke

    gmmg

  • gmmg

    Zur Zeit hat Deine REG-Datei ja nur die Typen REG_SZ und REG_DWORD. Die Unterscheidung ist anhand des Eintrags dord: im Wert sehr einfach.

    Für REG_SZ kannst Du den kompletten Wert übernehmen. Für REG_DWORD musst Du das Merkmal dword: aus dem Wert entfernen und den Rest der Funktion Dec() übergeben. Für die anderen möglichen Typen musst Du schauen, was da kommt und wie es angepasst werden muss.

    Um die Abweichung bei REG_SZ zu vermeiden, musst Du \\ durch \ ersetzen. Es kann sein, dass noch weitere Zeichen mit \ 'escaped' werden.


    Edit: Zu spät!