Einzelnen Beitrag anzeigen

Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#3

AW: WINCE Externes Programm starten

  Alt 29. Dez 2011, 11:14
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
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat