Consolenbefehl ausführen

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

Consolenbefehl ausführen

Beitrag von DL3AD »

Hallo,

ich möchte einen Consolenbefehl ausführen - das habe ich so gemacht.

Code: Alles auswählen

 
procedure TForm1.Button1Click(Sender: TObject);
var
  AProcess: TProcess;
begin
  AProcess:= TProcess.Create(nil);
  AProcess.CommandLine:= 'shutdown /s';//sollste ja auch unter Linux mit shutdown now funktionieren
  Aprocess.Execute;
  Aprocess.Free;
end;
 

Nun sagt er mir dass CommandLine veraltet ist - wie muss es denn aktuell gemacht werden ?

Fruß Frank

creed steiger
Beiträge: 957
Registriert: Mo 11. Sep 2006, 22:56

Re: Consolenbefehl ausführen

Beitrag von creed steiger »

da steht alles drin

https://www.freepascal.org/docs-html/fc ... ocess.html

Executable und Parameters sind deine neuen Freunde ;)

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Consolenbefehl ausführen

Beitrag von wp_xyz »

DL3AD hat geschrieben:Nun sagt er mir dass CommandLine veraltet ist - wie muss es denn aktuell gemacht werden ?

Hier ist ein Beispiel ohne CommandLine.

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: Consolenbefehl ausführen

Beitrag von compmgmt »

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  AProcess: TProcess;
begin
  AProcess:= TProcess.Create(nil);
  {$ifdef mswindows}
    AProcess.Executable := GetEnvironmentVariable('comspec');
    AProcess.Parameters.Add('/c'); // oder "/k", wenn die CMD nach dem Ausführen geöffnet bleiben soll
    AProcess.Parameters.Add('shutdown -s'); // Hier der Befehl
  {$else}
    AProcess.Executable := '/bin/bash';
    AProcess.Parameters.Add('-c');
    AProcess.Parameters.Add('poweroff'); // Hier der Befehl
  {$endif}
  Aprocess.Execute;
  Aprocess.Free;
end;
Der Linux weg wurde von mir nicht explizit getestet, sollte aber funktionieren. Der Windows weg funktioniert auf jeden Fall.

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

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: Consolenbefehl ausführen

Beitrag von DL3AD »

... Danke für eure Tipps.

Nun funktioniert es - musste noch sudo mit einfügen.

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: Consolenbefehl ausführen

Beitrag von Socke »

Warum startet ihr ein Programm um ein Programm zu starten?
Unter Windows heißst das Programm "C:\Windows\System32\shutdown.exe".
Für Linux muss man ebenfalls nicht die Bash (oder eine andere Shell) bemühen, sondern kann /sbin/shutdown direkt als Programm angeben (oder /usr/bin/sudo).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: Consolenbefehl ausführen

Beitrag von compmgmt »

Socke hat geschrieben:Warum startet ihr ein Programm um ein Programm zu starten?
Unter Windows heißst das Programm "C:\Windows\System32\shutdown.exe".
Weil er CMD-Befehle ausführen wollte. Natürlich sind shutdown, reg, mmc usw. externe Programme, die man direkt ausführen kann, andere Befehle jedoch nicht. Im Fall von shutdown würde man auch direkt die exe starten können, bei anderen Dingen jedoch nicht.

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

Antworten