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 ?
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.
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
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.