[gelöst] Programmaufruf mit TProcess

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

[gelöst] Programmaufruf mit TProcess

Beitrag von Hercules »

Hallo an Alle!
Ich muss aus einer laufenden Anwendung ein anderes Programm starten.
Wenn das funktioniert hat, dann soll die laufende Anwendung (das rufende Programm)
beendet werden.
Ich habe dazu mal ein kleines Testprogramm geschrieben (TProcess1.exe) und mich bei dem zu
rufenden Programm für den Rechner (Calc.exe) von Windows entschieden. Mein Programm
besteht aus einer Form mit zwei Buttons drauf. Button1 soll die Calc.exe von Windows starten
und dann sich selbst (TProcess.exe) beenden. Der Button2 beendet die Anwendung normal.
Das funktioniert auch, der Windows-Rechner wird aufgerufen und man kann ihn sogar benutzen,
aber die aktive Anwendung (das rufende Programm) wird nicht beendet. Man kann sie
sogar mehrmals aufrufen, und sie ist dann auch mehrmals im Task-Manager zu sehen.
Hat jemand eine Idee ?
Mit freundlichen Grüßen, Hercules.
Dateianhänge
TProcess.bmp
TProcess.bmp (1.35 MiB) 1782 mal betrachtet
Zuletzt geändert von Hercules am Do 9. Apr 2015, 17:50, insgesamt 1-mal geändert.

baumina
Beiträge: 152
Registriert: Mo 3. Feb 2014, 14:07
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Programmaufruf mit TProcess

Beitrag von baumina »

In der procedure ProgrammNeuStarten fehlt ganz einfach als letzte Zeile ein

Code: Alles auswählen

Close;
um das Programm zu schließen.

Von

Code: Alles auswählen

Halt;
würde ich persönlich abraten.
.

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Programmaufruf mit TProcess

Beitrag von hde »

poWaitonExit !!

Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Programmaufruf mit TProcess

Beitrag von Hercules »

Hallo baumina,
hallo Hde.
Vielen Dank für Eure schnelle Reaktion.
Ich habe poWaitOnExit schon im Programm,
jetzt habe ich danach noch einen Close eingefügt.
Meine aktuelle Anwendung will sich einfach nicht beenden.....

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Programmaufruf mit TProcess

Beitrag von hde »

poWaitOnExit verhindert es ja auch

Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Programmaufruf mit TProcess

Beitrag von Hercules »

Hallo baumina,
nochmal was zu deinem vorgeschlagenem Close.
Ich habe den nach dem Befehl AProcess.Free eingefügt.
Die Wirkung ist wie folgt:
Das Programm Calc.exe wird zwar aufgerufen, aber
meine Anwendung bleibt auch noch auf dem Bildschirm.
Wenn ich die Calc.exe dann schließe, erst dann wird auch meine
Anwendung geschlossen.
Hercules.

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Programmaufruf mit TProcess

Beitrag von hde »

Dein Programm folgt nicht deinen Absichten
sondern deinen Anweisungen

und die sagen genau das was du schilderst

Hercules
Beiträge: 104
Registriert: Mi 2. Jun 2010, 17:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Programmaufruf mit TProcess

Beitrag von Hercules »

Hallo Hde,
hallo baumina,
vielen Dank an Euch beide.
Die Reihenfolge der einzelnen Befehle hatte ich mir
aus Lazarus herunter geladen dort stand:

// Während das externe Programm läuft, soll unser
// Programm natürlich nicht weiterlaufen.
// Dies regeln wir mit folgender Bedingung:
AProcess.Options := AProcess.Options + [poWaitOnExit];

Ich habe jetzt folgendes gemacht:
1. Ich habe den poWaitOnExit raus gemacht, Danke an Hde.
2. Nach dem letzten Befehl habe ich den Close eingefügt,Danke an baumina.
Hurra, so funktionierts!!!!!
Vielen Dank nochmal.
Mit freundlichen Grüßen, Hercules.

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: [gelöst] Programmaufruf mit TProcess

Beitrag von hde »

Hercules hat geschrieben:// Während das externe Programm läuft, soll unser
// Programm natürlich nicht weiterlaufen.


eben, es läuft nicht weiter sondern wartet bis das aufgerufene Fremdprogramm beendet wird.
erst dann wird der nächste Befehl ausgeführt.

Antworten