Hallo!
Ich habe ein sehr delikates Problem: Das "Run ( "program" [, "workingdir" [, show_flag [, opt_flag]]] )" funktioniert nicht immer.
Kurze Erklärung dazu: Ich habe für WinPE (4) das ich mit dem WinBuilder erstelle einen Loader gebastelt der via HTTP ein Konfigfile ladet und die darin enthaltenen Befehle abarbeitet. Hört sich jetzt kompliziert an als es ist!
Unter anderem habe ich das Kommand "RUN" geschaffen das Programme starten soll:
run "x:\firefoxportable\firefoxporable.exe"|"x:\firefoxportable"
Im AutoITscript wird nichts anderes als $ret = run ("x:\firefoxportable\firefoxporable.exe", "x:\firefoxportable", @SW_SHOW,$RUN_CREATE_NEW_CONSOLE) aufgerufen. Natürlich ist das Ganze vor mir Variablen zugestopt...
Die Funktion selbst (das Script ist sehr viel länger)
func lauf ($anzahl, $hide=0)
local $full, $programm, $arbeit
local $proc
if $anzahl > 2 then
for $i = 2 to $anzahl
$full = $full & $kommand[$i] & " "
next
else
$full = $kommand[2]
endif
$full = pathset ($full)
$tmp = StringSplit ($full, "|")
;Wenn das Arbeitsverzeichnis nicht angegeben wird ein Defaultwert gesetzt
if $tmp[0] = 1 then
redim $tmp[3]
$tmp[2] = @ScriptDir
runme ("Es wurde kein Arbeitsverzeichnis angegeben! - Arbeitsverzeichnis auf " & $tmp[2] & " gesetzt")
endif
runme ('Ausführen von Run: ' & $tmp[1] & ' im Arbeitsverzeichnis: ' & $tmp[2])
;Für einen neuen "Befehl" - hier kann entschieden werden ob der Prozess sichtbar oder nicht sichtbar ist
if $hide = 0 then
$proc = run ($tmp[1], $tmp[2], @SW_SHOW,$RUN_CREATE_NEW_CONSOLE)
runme ("Task mit der Prozess-ID " & $proc & " ist gestartet worden")
else
$proc = ShellExecute ($tmp[1],"", $tmp[2],"", @SW_SHOW) ;Umgestellt da run unter PE ein Problem hat
runme ("Task mit der Prozess-ID " & $proc & " ist versteckt gestartet worden")
endif
status1 ("Programm gestartet: " & $tmp[1])
status2 ("Task wird gestartet...")
endfunc
Alles anzeigen
Und jetzt kommt's: So lange ich mit Version 3.3.14 gearbeitet habe hat alles gepasst. Ich konnte mit "run" (aus meiner Konfig) ein Dos-Fenster öffnen, FF starten, Consolenprogramme durchlaufen lassen, und auch DOS-Kommandos absetzten (del x:\windows\temp\*.* /S).
Nachdem ich ein paar Kleinigkeiten geändert habe (aber nicht diese Funktion) passt der Aufruf nicht mehr. Ich bekomme auch immer nur ProzessID 0 zurück. Allerdinge ein cmd.exe funktioniert immer noch !!!!
Ich wollte auf shellexecute ausweichen, nur das ist etwas "unhandlicher" mit den Parameter in zusammenspiel zwischen meinen Konfigfiles und der Syntax des Befehls
Ich weiß, es gibt sicher nicht viele die Für WinPE Tool/Programme in AutoIT schreiben, aber ist jemanden so etwas schon aufgefallen???
lg
Racer