Winwows10, *.exe als angemeldeter User als Admin starten

  • Hallo,

    steinigt mich bitte nicht. Dieses Thema ist bereits mehrfach in Themen besprochen worden, jedoch auf mein Vorhaben habe ich fragen.

    Mein Vorhaben:

    Ich möchte die Defrag.exe im @SystemDir aufrufen und die Ausgabe der CMD in eine Textdatei ausgeben lassen. Das geht aber nur in einer CMD, gestartet als Admin. Also habe ich folgendes versucht.


    1. Mit #RequireAdmin sorge ich dafür, dass meine Funktion nur als Admin ausgeführt werden kann.

    2. Mit Local $ordnerwahl = GUICtrlRead($Inputbox3) lese ich meine Inputbox aus

    3. Mit Local $cmd = RunAs("admin", "", "", 0, @SystemDir & "\cmd.exe", $ordnerwahl, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD) möchte ich eine CMD mit Adminrechten starten

    4. Mit Local $contigdir = RunAs("admin", "", "", 0, $cmd & "\Defrag.exe", $ordnerwahl) möchte ich "Defrag.exe" mit Adminrechten aus der Konsole mit Adminrechten starten können

    5. Mit Local $bericht = Run($contigdir & ' /A', $ordnerwahl, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD) möchte ich Defrag.exe mit dem Parameter /A starten. ($bericht lasse ich mir mit Hilfe von StdoutRead ausgeben. Wie das geht weiß ich.)

    Meine Fragen:
    1. Wie bezeichne ich in AutoIt den angemeldeten User mit dem benutzten Passwort, da RunAs ja diese Eingaben fordert?
    2. Würdet ihr das ganze anders lösen?

  • Wozu brauchst du runas? Dein Autoitscript läuft doch bereits mit erhöhten Rechten wenn du #requireadmin verwendest. Alle vom Programm aus gestarteten Prozesse erhalten ebenfalls die Rechte des aufrufenden Scriptes. Ein CMD Fenster brauchst du genausownig wenn die defrag.exe eine Kommandozeilenanwendung ist starte sie einfach direkt.

    Du scheinst auch nicht ganz verstanden zu haben was run oder runas tut. Du kannst nicht ein cmd Fenster öffnen und mit einem zweiten run Aufruf irgendetwas da rein schreiben. Ein run Aufruf gibt dir eine PID (Prozess ID) zurück. Diese kannst du unter Umständen nutzen um etwas in den STDIN des Prozesses zu schreiben, aber sicher nicht so wie du das hier gerne machen würdest.

  • Hallo,


    Wozu brauchst du runas? Dein Autoitscript läuft doch bereits mit erhöhten Rechten wenn du #requireadmin verwendest. Alle vom Programm aus gestarteten Prozesse erhalten ebenfalls die Rechte des aufrufenden Scriptes. Ein CMD Fenster brauchst du genausownig wenn die defrag.exe eine Kommandozeilenanwendung ist starte sie einfach direkt.

    Das was Du schreibst, dachte ich zu Anfangs auch. Ist aber leider Fehlanzeige. Ich nutze Windows 10 x64 und arbeite auf meinem Notebook bereits mit Adminrechten und ausgeschalteter UAC.
    Dennoch muss ich, um im @SystemDir & Defrag.exe (Defrag.exe ist ein Konsolenprogramm) starten zu können, ein CMD-Fenster (rechtsklick) "als Administrator ausführen". Daher denke ich, dass ich die CMD mit "RunAs" auszuführen muss, um Defrag.exe überhaupt starten zu können.

    Ein run Aufruf gibt dir eine PID (Prozess ID) zurück. Diese kannst du unter Umständen nutzen um etwas in den STDIN des Prozesses zu schreiben, aber sicher nicht so wie du das hier gerne machen würdest.


    Event. kannst Du mir die richtige Vorgehensweise hier aufzeigen. Wäre klasse.

  • Hallo,

    ich habe mein Vorhaben mit Hilfe der Remarks für Run hinbekommen.

    Code
    To run DOS (console) commands, try Run(@ComSpec & " /c " & 'commandName', "", @SW_HIDE)    ; don't forget " " before "/c"
    
    
    After running the requested program the script continues. To pause execution of the script until the spawned program has finished use the RunWait() function instead.
    
    
    Providing the Standard I/O parameter with the proper values permits interaction with the child process through the StderrRead(), StdinWrite() and StdoutRead() functions. Combine the flag values (or use $STDERR_CHILD, $STDIN_CHILD & $STDOUT_CHILD) to manage more than one stream.
  • Hallo,

    bitte verzeiht mir den 3fach Posting. Geht doch nicht so wie ich möchte. Ich bin am verzweifeln ganz ehrlich gesagt.

    Ich möchte eine Ausgabe von der Prüfung der Windows eigenen Defragmentierung.
    Defrag.exe wird einfach nicht unter meiner Win10 x64 Umgebung gestartet.
    Kann mir irgend jemand sagen, warum mein mein Beispielskript nicht funktioniert?

  • Zeile 2-3 musste ich bei mir austauschen, wahrscheinlich nutzt die aktuellste AutoIt-Version ein anderes Include
    Zeile 6+13+17 ShellExecute funktioniert nicht mit dem FileHandle

    Und wichtig: Muss auf einem 64bit-Windows auch mit x64 kompiliert ausgeführt werden. Scheinbar gibt es auf einem x64-System kein 32bit Defrag.exe.

    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"