Vorheriges Thema: Delay oder Sleep - Verzögern der SkriptausführungNächstes Thema: Exit - Beenden des Skripts


Exec oder Execute - Ausführen einer Anwendung

Gültig für NetWare, Symbian OS, UNIX, Windows und Windows CE.

Durch die Funktion "Exec" oder "Execute" wird die angegebene Anwendung ausgeführt.

Diese Funktion hat das folgende Format:

Execute(cmdline as String, wait as Boolean, style as Integer) as Integer 
Execute(cmdline as String, wait as Boolean) as Integer
Execute(cmdline as String) as Integer
cmdline

Gibt die Befehlszeile an (filename plus optionale Parameter).

Hinweis: Unter Windows müssen Sie die Dateierweiterung angeben, sofern die auszuführende Datei nicht die Endung ".exe" hat. Unter Windows 9x geben Sie beispielsweise "command.com" anstelle von "command" an.

wait

Gibt an, ob das Skript warten soll, bis die Anwendung beendet ist. (nur Windows)

style

Gibt den Fensterstil für die Anwendung an. (nur Windows)

Hinweis: Wenn ein Befehl in der Befehlszeile ein Leerzeichen enthält, setzen Sie diesen in Anführungszeichen. Beispiel: Execute("""\temp 1\prgedit.exe""",true,0).

Durch den Parameter "wait" wird angegeben, ob die Funktion zur Skriptausführung zurückkehren soll, ohne die Beendigung der Anwendung abzuwarten. Der Wert TRUE zwingt die Funktion, die Beendigung der Anwendung abzuwarten. Der Standardwert ist TRUE.

Unter UNIX werden die Parameter "wait" und "style" ignoriert. Die Funktion wartet stets die Beendigung der Anwendung ab, bevor sie zur Skriptausführung zurückkehrt.

Durch den Parameter "style" wird angegeben, wie das Hauptfenster einer Windows-Anwendung angezeigt wird. Dieser Parameter kann folgende Werte aufweisen:

Wert: 0

Blendet das Fenster aus und übergibt die Aktivierung an ein anderes Fenster.

Wert: 1

Aktiviert ein Fenster und zeigt es in der Standardgröße und -position an. Dies ist die Standardeinstellung.

Wert: 2

Aktiviert ein Fenster und zeigt es als Symbol an.

Wert: 3

Aktiviert ein Fenster und zeigt es maximiert an.

Wert: 7

Zeigt ein Fenster als Symbol an. Das derzeit aktive Fenster bleibt aktiv.

Wenn die Funktion unter Windows erfolgreich ausgeführt werden kann, wird der Rückgabecode des angegebenen Befehls, der von der Funktion "execute()" aufgerufen wurde, durch einen nicht negativen Rückgabecode angegeben. Wenn der Befehl nicht vom Interpreter aufgerufen werden kann, weisen die folgenden Rückgabecodes auf das zugrunde liegende Problem hin:

Rückgabecode: -1

Das System verfügt nicht über genügend Arbeitsspeicher oder Ressourcen.

Rückgabecode: -2

Die angegebene Datei wurde nicht gefunden:

Rückgabecode: -3

Der angegebene Pfad wurde nicht gefunden:

Rückgabecode: -4

Die EXE-Datei ist ungültig.

Rückgabecode: -5

Unbekannter Fehler.

Unter UNIX wird der angegebene Befehl durch die Systemfunktion "system()" aufgerufen. Daher entspricht der zurückgegebene Code dem Rückgabecode von "system()". Das heißt, wenn "system()" fehlschlägt, wird "-1" zurückgegeben. Wenn "system()" erfolgreich ist, entspricht der zurückgegebene Wert dem Format des "waitpid()"-Rückgabecodes. Ein Skript muss den Rückgabecode analysieren, um zu ermitteln, ob Befehle erfolgreich aufgerufen werden konnten oder nicht. Zu diesem Zweck stehen die folgenden Funktionen zur Verfügung:

'
' Unix-Unterstützung für die Evaluierung von Execute()-Rückgabecodes
'
 
' ******************************************************************************************************
'
' Name
'   DMS_ExecExit(retVal As Integer) As Boolean
'
' Description
'   Determines whether the process started by Execute() has terminated normally or not.
'
' Arguments
'   retVal	return code to be evaluated
'
' Returns
'   TRUE	if normally terminated
'   FALSE	else.
'
' Comment
'  The function corresponds to the waitpid(5) description of the macro WIFEXITED
'	#define WIFEXITED(stat)     ((int)((stat)&0xFF) == 0)
'
Function DMS_ExecExit(retVal As Integer) As Boolean
	If (retVal And 255) Then
		DMS_ExecExit = FALSE
	Else
		DMS_ExecExit = TRUE
	End If
End Function
 
' ******************************************************************************************************
'
' Name
'   DMS_ExecExitStatus(retVal As Integer) As Integer
'
' Description
'   Determines the shell exit code from the return value of the Execute() call, i.e. the return code of 
'   the invoked process.
'
' Arguments
'   retVal	Retrun code retuned from Execute()
'
' Returns
'   If the Execute() has terminated normally the reported status of the child is returned, otherwise 
'   retVal is returned.
'
' Comment
'  The function corresponds to the waitpid(5) description of the macro WEXITSTATUS
'	#define WEXITSTATUS(stat)   ((int)(((stat)>>8)&0xFF))
'
Function DMS_ExecExitStatus(retVal As Integer) As Integer
	If Not(DMS_ExecExit(retVal)) Then
		DMS_ExecExitStatus = retVal
	Else
		DMS_ExecExitStatus = retVal / 256
		DMS_ExecExitStatus = DMS_ExecExitStatus And 255
	End If
End Function

Wenn die Funktion erfolgreich ausgeführt wird, ist der Rückgabewert nicht negativ (der Beendigungscode der Anwendung, wenn durch WAIT angegeben wurde, dass die Funktion die Beendigung der Anwendung abwarten soll). Andernfalls gibt die Funktion einen der folgenden Fehlerwerte zurück:

Wert: -1

Das System verfügt nicht über genügend Speicherplatz oder Ressourcen.

Wert: -2

Die angegebene Datei wurde nicht gefunden:

Wert: -3

Der angegebene Pfad wurde nicht gefunden:

Wert: -4

Die EXE-Datei ist ungültig.

Wert: -5

Unbekannter Fehler.

Beispiel: Funktion "Execute"

In diesem Beispiel wird eine temporäre Datei erstellt und mit dem Texteditor von Windows geöffnet. Die Skriptausführung wird angehalten, solange der Editor ausgeführt wird.

Dim Tempname as string  ' Holds filename of temporary file
Dim hFile as integer   ' Handle of temporary file

' First obtain temporary filename and create file...
Tempname=EnvGetString("TEMP")
if TempName="" then
	TempName="MyFile.txt"
else
	Tempname=Tempname+"\MyFile.txt"
end if
hfile=CreateFile(Tempname)

if hFile<0 then
	 ' An error occured while creating file, inform user and exit.
	 MsgBox("Could not create temporary file...")
	 goto end
end if

' Store some text in the file and close it...
WriteFile(hFile,"This text is shown using notepad")
WriteFile(hFile,"")
WriteFile(hFile,"Please exit notepad to resume script execution")
Closefile(hFile)

'Launch notepad with the file...
if Execute("notepad "+Tempname,TRUE)<0 then MsgBox("Could not launch notepad...")

'remember to Erase the temporary file before leaving...
DeleteFile(Tempname)

end: