Also ich havbe die
unit PascalProcess mal ausprobiert... mehrere tage.
Es scheint gut für manche dinge zu funktionioeren aber andere wiederum nicht so .
Delphi-Quellcode:
procedure ProcessTest;
Begin
var output:TBytes;
//Funktioniert
output := TPProcess.Execute('/system/bin/ls -l ttyS9', '/dev' );//output = '--x---x---x ttyS9 hasse nicht gesehen'
TDialogService.ShowMessage(Tencoding.UTF8.Getstring(output));
//Funktioniert anscheinend irgendwie nicht alle '*' eingaben kann ls nicht über TPProcess
output := TPProcess.Execute('/system/bin/ls -l tty*', '/dev' );//output = 'no such file tty*'
TDialogService.ShowMessage(Tencoding.UTF8.Getstring(output));
//Ich weiß nicht ob es funktioniert, aber kein output und auch kein effekt, aber auch keine Fehlermeldung
output := TPProcess.Execute('/system/bin/su root /system/bin/ls -l ttyS9', '/dev' );//output = ''
TDialogService.ShowMessage(Tencoding.UTF8.Getstring(output));
output := TPProcess.Execute('/system/bin/su root /system/bin/chmod 777 /dev/ttyS9', '/dev' );//output = ''
TDialogService.ShowMessage(Tencoding.UTF8.Getstring(output));
end;
Ich glaube dass wenn ich /system/bin/su erzeuge, die Pipes für in/out/err nicht wirklich mit dem Process verbunden sind aber dennoch existieren...deswegen bekomme ich keine Fehlermeldung winn ich in die "in" pipe schreibe und keine error Meldung wenn ich die outpipe auslese...
ich habe das versucht mit nem interaktiven process.
Delphi-Quellcode:
Procedure SetFileRights(
const fileRights:
String);
Begin
var report:
string;
try
var Attributes := TFile.GetAttributes('
/dev/ttyS9');
report := report + '
WriteRights:'+ord(TFileAttribute.faOthersWrite
in Attributes).ToString+slineBreak;
var Process:IPProcess := (TPProcess.Create( '
/system/bin/su', '
/dev' )
as IPProcess);
report := report + '
Process Created'+slineBreak;
Process.MergeError := true;
Process.Execute;
report := report + '
Process started'+slineBreak;
Sleep(150);
var chmod_Command := '
chmod '+fileRights+'
/dev/ttyS9'+linefeed;
report := report + '
chmod_Command composed: '+chmod_Command+slineBreak;
var cmd:TBytes := Tencoding.UTF8.GetBytes(UTF8Encode(chmod_command));
Process.WriteProcessInput(cmd);
report := report + '
chmod_Command written '+slineBreak;
Sleep(150);
report := report + '
Process-Output:' + Tencoding.utf8.Getstring(Process.Output)+slinebreak;
var exit_Command := '
exit'+linefeed;
report := report + '
exit_Command composed: '+exit_Command+slineBreak;
cmd := Tencoding.UTF8.GetBytes(UTF8Encode(exit_Command));
Process.WriteProcessInput(cmd);
report := report + '
exit_Command written '+slineBreak;
Sleep(150);
Process.Waitfor;
report := report + '
Process Ended' + slineBreak;
report := report + '
Process-Output:' + Tencoding.utf8.Getstring(Process.Output)+slinebreak;
Attributes := TFile.GetAttributes('
/dev/ttyS9');
report := report + '
WriteRights:'+ord(TFileAttribute.faOthersWrite
in Attributes).ToString+slineBreak;
except
on E:
Exception do
Begin
report := report +'
Exception: '+ e.
Message+slinebreak;
end;
end;
sleep(200);
TDialogService.ShowMessage( Report);
end;
Kein Ergebnis kein output und aber auch keine Fehler
Mache ich irgend etwas falsch?