Hallo,
ich möchte in einem versteckten CMD-Window ein batch file ausführen (Update-Routine) und die Ausgabe des CMD-Fensters mitloggen. Soweit so gut, das Verstecken mit SW_HIDE hat geklappt, auch das Senden der Kommandozeilen-Eingabe per ControlSend funktioniert:
Local $iPID = Run(@ComSpec & " /c StartDirectUpdater.bat", "U:\Eigene Dateien\Tools\swUpdater", @SW_HIDE)
;Wait for CMD to be opened
$result = WinWait("C:\Windows\system32\cmd.exe", "", 15)
Sleep(2000)
ControlSend("C:\Windows\system32\cmd.exe", "", "", "sendhexfile filename" & "{ENTER}")
MsgBox($MB_OK, "Result", $result);
Wenn ich der Run-Funktion nun aber noch die Flags $STDERR_CHILD + $STDOUT_CHILD verpasse, die ich für das Logging in einer Datei ja benötige, scheint das ControlSend nicht mehr zu wirken. Das erkenne ich daran, dass bei meinem upzudatenden Client eben kein Update passiert.
Als Anmerkung vielleicht noch: Das Sleep wird benötigt, weil das Batch File zunächst einige Ausgaben macht bevor es den Befehl interpretieren kann. Schickt man ihn zu früh, wird er u.U. nicht übernommen.
Danke schonmal!