Script schreibt keine Registry-Einträge

  • Hallo,
    ich bin völlig neu in der Welt von AutoIt und sag daher erstmal hallo.."Hallo!" ;)

    Ich hab schon etwas durchblick gewonnen und möchte mit AutoIt eine Art "Automatische Wartung" für den Computer erstellen, die ich wöchentlich über die Aufgabenplanung starten möchte. Bis jetzt bin ich aber erst am Anfang und schaffe es nicht, das mir das Script (habs als EXE umgewandelt) die nötigen Registry Werte zu importieren.

    Spoiler anzeigen

    Die *.exe wird dann als Admin ausgeführt, aber trotzdem schaffe ich es nicht, das die Werte in die Registry eingetragen werden. Die Sache mit der Datenträgerbereinigung funktioniert einwandfrei... Könnt ihr mir den entscheidenen Tipp geben? Danke im voraus! :)

  • Probier mal, ein

    [autoit]

    #RequireAdmin

    [/autoit]

    an des Anfang des Scripts zu setzen.

    Mfg

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • oder bei 32bit kompiliertem Script unter 64bit Windows zusätzlich zu '#RequireAdmin'
    'HKLM64' statt 'HKLM' in den Reg-Zeilen.

    Gruß
    Micha

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Prüf mal den @error, der von RegWrite zurückkommt.
    Zitat aus der Hilfe:

    Wer andern eine Bratwurst brät
    der hat ein Bratwurstbratgerät.

  • Entschuldigt die späte Antwort, ich versuch grad das @error einzubauen, aber irgendwie funktioneirt das nicht. In der Hilfe steht das so drin:

    Code
    #RequireAdmin
    	  RegWrite("HKLM64\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "AutoAdminLogon", "REG_SZ", "1",)
    If @error Then
        MsgBox(4096, "Error", "Division by Zero")
    Else
        MsgBox(4096, "Result", $result)
    EndIf
    Exit

    Aber dabei erhalte ich den Fehler:
    Line 6 (File:"x"):
    Error: Variable used without being declared

  • Bau einfach ein

    [autoit]


    MsgBox(0, "", @error)

    [/autoit]


    direkt nach dem RegWrite ein. Den Rest brauchst du nicht ;)
    (Oder ein ConsoleWrite anstatt der MsgBox)

    Da es hier doch einige falsch machen:

    Zitat von einem User dieses Forums

    Die Standard-Standart eines Flamingos ist einbeinig. ;)

  • Ah okay.. Das ist ja cool :D :D

    Okay, also in der MsgBox steht nur eine Null.., ansonsten nichts. Ich hab mir überlegt ob es vielleicht an der Datenausführungsverhinderung von meinem Windows 7 liegt, aber nachdem ich die EXE in die Liste der Ausnahmen gepackt hab, hat sich immer noch nix verändert.. :(
    /EDIT: Das komische ist auch, das wenn der Befehl durch AutoIt in cmd geschrieben wird, ändert sich in der Registry auch kein einziger Wert..

    /EDIT2: Es lag an der Datenausführungsverhinderung.. Obwohl die EXE in den Ausnahmen gelistet wurde, wurde die Aktion verhindert.. Wird durch die EXE ein anderes Programm aufgerufen, welches das Script abarbeitet? Dann würde ich den "übeltäter" in die Liste eintragen und müsste den Dienst nicht abschalten..

    Einmal editiert, zuletzt von nobody1407 (13. März 2013 um 22:17)

  • Ich hab mal das hier versucht:

    [autoit]


    #RequireAdmin
    $result = RegWrite("HKLM64\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "AutoAdminLogon", "REG_SZ", "1")
    if $result = 1 Then
    MsgBox(4096, "", "kein Fehler")
    Else
    MsgBox(4096, "", "Fehler : " & @error)
    EndIf

    [/autoit]


    Ich kriege als Ausgabe "kein Fehler". ?(

    Wer andern eine Bratwurst brät
    der hat ein Bratwurstbratgerät.

    2 Mal editiert, zuletzt von ohforf (13. März 2013 um 22:41)

  • Eine Frage, wenn ich mit autoit eine exe Datei als Administrator starte und die kommandozeile aufrufe und"bcdedit /set safeboot minimal" eintippen lasse, kann das Programm nicht gefunden werden. Wenn ich allerdings die kommandozeile manuell als admin starte funktioniert es. Wo liegt jetzt da der unterschied?

    Spoiler anzeigen

    2 Mal editiert, zuletzt von nobody1407 (17. März 2013 um 18:12)

  • Okay, ich bin zumindest etwas weiter gekommen:

    Spoiler anzeigen
    [autoit]


    #AutoIt3Wrapper_UseX64=y
    #RequireAdmin
    ;INFO-FENSTER
    MsgBox(4096, "Automatischer Wartungsmodus", "Windows wird nun für die automatische Wartung vorbereitet. (20 Sekunden) ", 20)
    Sleep(2000)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;CMD MIT DATENTRÄGERBEREINIGUNG
    Run("cmd")
    Sleep(2000)
    Opt("SendKeyDelay", 50)
    Send ("cleanmgr{SPACE}+7sagerun+.65532")
    Send ("{ENTER}")

    ;WARTEZEIT FÜR DATENTRÄGERBEREINIGUNG
    Sleep(30000)

    [/autoit] [autoit][/autoit] [autoit]

    ;RUHEZUSTAND DEAKTIVIEREN
    Run("cmd.exe")
    Sleep(2000)
    Opt("SendKeyDelay", 50)
    ;HIER SOLLTE DAS SCRIPT BCDEDIT BEARBEITEN, FUNKTIONIERT ABER NICHT (FEHLER IN DER CMD = KANN NICHT GEFUNDEN WERDEN)
    Send ("cd C:/Windows/System32")
    Send ("{ENTER}")
    Sleep(500)
    Send ("bcdedit.exe /set safeboot minimal")
    Send ("{ENTER}")
    Sleep(500)
    Send ("bcdedit.exe /set safebootalternateshell yes")
    Send ("{ENTER}")

    [/autoit] [autoit][/autoit] [autoit]

    ;RUHEZUSTAND DEAKTIVIEREN
    Send ("powercfg -h off")
    Send ("{ENTER}")
    Sleep(100)
    Send ("exit")
    Send ("{ENTER}")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;REGISTRY BEARBEITEN
    RegWrite("HKLM64\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "AutoAdminLogon", "REG_SZ", "1")
    RegWrite("HKLM64\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "DefaultUserName", "REG_SZ", "Benutzername")
    RegWrite("HKLM64\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "DefaultPassword", "REG_SZ", "Passwort")
    RegWrite("HKLM64\SYSTEM\CurrentControlSet\Control\SafeBoot" , "AlternateShell" , "REG_SZ", "Wartung.cmd")
    RegDelete("HKLM64\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" , "PagingFiles")

    Run("cmd")
    Sleep(2000)
    Opt("SendKeyDelay", 50)
    Send ("shutdown -r -t 005")
    Send ("{ENTER}")
    Sleep(500)
    Send ("{ENTER}")
    Sleep(500)
    Send ("exit")
    Send ("{ENTER}")
    Exit

    [/autoit]

    Ich bin jetzt zumindest bis hier her gekommen, hatte aber auch mit dieser Lösung keinen Erfolg:

    Spoiler anzeigen
    [autoit]


    RunWait(@ComSpec & ' /c bcdedit /set ' & $BCDstore & '/set {' & $guid & '} safeboot minimal' & $BCDmodel & , "", @SW_HIDE)
    RunWait(@ComSpec & ' /c bcdedit /set ' & $BCDstore & '/set {' & $guid & '} safebootalternateshell yes' & $BCDmodel & , "", @SW_HIDE)

    [/autoit]

    Habt ihr noch eine Idee wie ich den PC im abgesicherten Modus und alternativen Shell starten kann?