externes Programm starten und Startendes Pogramm schließen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

externes Programm starten und Startendes Pogramm schließen

Beitrag von DL3AD »

Hallo,

ich möchte dass meine Anwendung ein anderes Programm startet und die Anwendung sich dann schießt.
Folgendes habe ich mal getestet - Funktioniert auch soweit.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  AProcess: TProcess;
begin
  AProcess := TProcess.Create(nil);
  AProcess.CommandLine := 'Prog1';
  AProcess.Execute;
  AProcess.Options := AProcess.Options + [poWaitOnExit];
  AProcess.Free;
  Form1.Close;
end;                 

Ist dass so der übliche Weg oder gibt es eine bessere Variante (Plattformübergreifend) ?
Bei AProcess.CommandLine sagt er mir das sei veraltet - gibt es da was aktuelleres ?

Gruß
Frank

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: externes Programm starten und Startendes Pogramm schließ

Beitrag von Socke »

DL3AD hat geschrieben:Ist dass so der übliche Weg oder gibt es eine bessere Variante (Plattformübergreifend) ?
Bei AProcess.CommandLine sagt er mir das sei veraltet - gibt es da was aktuelleres ?

TProcess ist plattformübergreifend; damit solltest du also keine Probleme haben. Es verwendet aber die Systemcodepage, was zu Schwierigkeiten bei der Übertragung von Texten führen kann.

Anstatt CommandLine solltest du die Eigenschaften Executable und Parameters befüllen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: externes Programm starten und Startendes Pogramm schließ

Beitrag von DL3AD »

... Danke
Wie kann man den Fall abfangen wenn das aufzurufende Programm nicht existiert (Plattformübergreifend) ?

Gruß Frank

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: externes Programm starten und Startendes Pogramm schließ

Beitrag von Socke »

DL3AD hat geschrieben:Wie kann man den Fall abfangen wenn das aufzurufende Programm nicht existiert (Plattformübergreifend) ?

Es wird eine Exception geworfen; Laut der Dokumentation zu Execute ist das EProcess.

Code: Alles auswählen

try
  AProcess.Execute;
except
  on e: EProcess do ShowMessage('Fehler beim Programmstart: '+e.Message);
end;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
gladio
Beiträge: 217
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

Re: externes Programm starten und Startendes Pogramm schließ

Beitrag von gladio »

Könnte es auch hilfreich sein, vorher zu prüfen ob die zu öffende Datei vorhanden ist:

Code: Alles auswählen

 
...
If FileExists(Dateiname) then
begin
  ....
end
else
  showMessage(Dateiname + ' nicht vorhanden');
end;
 

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: externes Programm starten und Startendes Pogramm schließ

Beitrag von Socke »

gladio hat geschrieben:Könnte es auch hilfreich sein, vorher zu prüfen ob die zu öffende Datei vorhanden ist

Das ist mit Sicherheit hilfreich, ersetzt aber die Exception-Behandlung nicht.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: externes Programm starten und Startendes Pogramm schließ

Beitrag von DL3AD »

... die Idee mit FileExists hatte ich auch schon - aber unter Win heist die Datei z.B. Prog1.exe - aber unter Linux nur Prog1.
Auf jeden Fall werde ich mal die Exception abfangen.

Benutzeravatar
gladio
Beiträge: 217
Registriert: Sa 21. Jun 2014, 06:15
OS, Lazarus, FPC: Win10-64 - aktuelle Lazarus/FPC Standard-Edition
CPU-Target: 64Bit
Wohnort: Rügen

Re: externes Programm starten und Startendes Pogramm schließ

Beitrag von gladio »

Ich will dir ja nichts aufschwatzen...
aber wenn der Name des Programms feststeht, so oder so nur sein kann:

Code: Alles auswählen

If (FileExists(Prog1.exe)) or (FileExists(Prog1)) then ...

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: externes Programm starten und Startendes Pogramm schließ

Beitrag von DL3AD »

... klar - so kann man es auch machen Danke

Wo kann ich eigentlich einstellen das die gestellte Frage beantwortet/ Problem gelößt wurde ?

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: externes Programm starten und Startendes Pogramm schließ

Beitrag von Marsmännchen »

DL3AD hat geschrieben:... klar - so kann man es auch machen Danke

Wo kann ich eigentlich einstellen das die gestellte Frage beantwortet/ Problem gelößt wurde ?


Ruf deinen ersten Beitrag auf und schreibe sowas wie [gelöst] in den Titel.
Ich mag Pascal...

Antworten