Zitat von
Andidreas:
ich hab das ganze jetzt mal mit dem folgenden befehl versucht:
Code:
Sysutils.ExecuteProcess('/Application/ScanWedge.exe', ['','']);
hat den blöden nebeneffekt das er das programm startet, aber nicht in das aufrufende programm zurrückkehrt sondern wartet bis ich das aufgerufene programm beende :-/
Das ist der Zweck dieser Funktion. Siehe deren
Beschreibung (nun gut, es steht etwas versteckt drin; da
ExecuteProcess
den ExitCode des Programms zurückgibt, muss sich dieses ja erst beendet haben).
Zitat von
Andidreas:
hat jemand eine idee wie man unter wince ein programm im hintergrund mit starten kann, d.h.
programm 1 startet und ruft programm 2 auf und man kann mit beiden parallel arbeiten...
Der Standardweg unter Free Pascal für sowas ist
TProcess
. Siehe hierzu die
Dokumentation und ein Eintrag im
FPC Wiki.
Ganz wichtig: nicht auf die Idee kommen unter Windows CE / Windows Mobile StdIn/StdOut/StdErr Pipes zu verwenden. Das wird so weit ich weiß nicht unterstützt.
Zu deiner selbst gefundenen Lösung: warum machst du in deinem Hauptprogramm nicht einfach direkt beim Start ein
Delphi-Quellcode:
CreateProcess(PWideChar('/Application/ScanWedge.exe'), Nil, Nil, Nil, False, CREATE_NEW_CONSOLE, Nil, Nil, kSI, kPI);
// Wichtig: die in kPi übergebenen Handles schließen, damit du nicht unnötig Ressourcen verbrätst
CloseHandle(kPi.hThread);
CloseHandle(kPi.hProcess);
Hier wird nämlich nur gewartet, wenn du
WaitForSingleObject(kPi.hThread, SomeTime);
aufrufst (was
ExecuteProcess
intern macht).
Gruß,
Sven