Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Text Datei von Delphi Programm an einen Linux PC senden (https://www.delphipraxis.net/192022-text-datei-von-delphi-programm-einen-linux-pc-senden.html)

Jumpy 16. Mär 2017 14:50

AW: Text Datei von Delphi Programm an einen Linux PC senden
 
Wir haben das mal ungefähr so gemacht:

Delphi-Quellcode:
function SendFile:Boolean;
var output:String;
begin
output:=CaptureConsoleOutput(Command);
Result:=Pos('100%',output)>0;
end;


//Diese Funktion hab ich mal irgendwo gefunden (hier in der DP ?)
function CaptureConsoleOutput(const ACommand: String):String;
const
    CReadBuffer = 2400;
var
    saSecurity: TSecurityAttributes;
    hRead: THandle;
    hWrite: THandle;
    suiStartup: TStartupInfo;
    piProcess: TProcessInformation;
    pBuffer: array [0 .. CReadBuffer] of AnsiChar;
    dBuffer: array [0 .. CReadBuffer] of AnsiChar;
    dRead: DWord;
    dRunning: DWord;
    erg:String;
begin
    saSecurity.nLength := SizeOf(TSecurityAttributes);
    saSecurity.bInheritHandle := True;
    saSecurity.lpSecurityDescriptor := nil;
    erg:='';
    if CreatePipe(hRead, hWrite, @saSecurity, 0) then
    begin
        FillChar(suiStartup, SizeOf(TStartupInfo), #0);
        suiStartup.cb := SizeOf(TStartupInfo);
        suiStartup.hStdInput := hRead;
        suiStartup.hStdOutput := hWrite;
        suiStartup.hStdError := hWrite;
        suiStartup.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
        suiStartup.wShowWindow := SW_HIDE;

        if CreateProcess(nil, pChar(ACommand+' '), @saSecurity, @saSecurity, True, NORMAL_PRIORITY_CLASS, nil, nil, suiStartup, piProcess) then
        begin
            //repeat
                dRunning := WaitForSingleObject(piProcess.hProcess, 2000);
                Application.ProcessMessages();
                repeat
                    dRead := 0;
                    ReadFile(hRead, pBuffer[0], CReadBuffer, dRead, nil);
                    pBuffer[dRead] := #0;
                    OemToCharA(pBuffer, dBuffer);
                    erg:=dBuffer;
                until (dRead < CReadBuffer);
            //until (dRunning <> WAIT_TIMEOUT);
            CloseHandle(piProcess.hProcess);
            CloseHandle(piProcess.hThread);
        end;
        CloseHandle(hRead);
        CloseHandle(hWrite);
    end;
    Result:=erg;
end;

function Command: String;
var path:String;
begin
  //hier lag die PSCP.exe mit im Programm-Verzeichnis, daher:
  path:=ExtractFilePath(Application.ExeName);
  Result:=path+'pscp.exe -P '+Port+' -pw '+pswrd+' '+
          Dateienname+' '+username+'@'+URL+':'+targetdir;

  //alt mit keyfile im Programm-Verzeichnis:
  //Result:=path+'pscp.exe -P '+Port+' -i '+path+keyfile+' '+
  //        Dateiename+' '+username+'@'+URL+':'+targetdir;
end;
Bei fernsteuern der ganzen Putty-Dinger muss man nur aufpassen, wenn mal der Server wechselt oder so, da Putty dann nachfragt, wenn eine andere Signatur gefunden wird (macht ja Sinn). Aber wenn das im Batch-Betrieb passiert ist das nervig, wobei es da wohl auch Parameter gibt, die dan ggf. verhindern können?

BrightAngel 16. Mär 2017 15:17

AW: Text Datei von Delphi Programm an einen Linux PC senden
 
Ja, aber er hat es ja jetzt mit WinExec gemacht. Hatte mich da gefragt, wie er den Erfolg auswertet. Das ist ja mit CreateProcess eigentlich einfacher, oder? :|

A.Griffin 17. Mär 2017 08:45

AW: Text Datei von Delphi Programm an einen Linux PC senden
 
Bis jetzt habe ich den Erfolg noch gar nicht ausgewertet.

Rollo62 17. Mär 2017 09:21

AW: Text Datei von Delphi Programm an einen Linux PC senden
 
Bin nicht sicher ob es in deinem Fall hilft, aber kennst du DosCommand im GetIt Package ?

Das kann sowie ich weiss einiges in Richtung stdin stdout bewerkstelligen.

Rollo

A.Griffin 21. Mär 2017 09:37

AW: Text Datei von Delphi Programm an einen Linux PC senden
 
DosCommand hört sich sehr interessant an. Wo bekomme ich für Delphi 7 das her?

Rollo62 21. Mär 2017 12:09

AW: Text Datei von Delphi Programm an einen Linux PC senden
 
TurboPack/DOSCommand

-obs mit D7 läuft weiss ich nicht


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz