![]() |
Delphi-Version: 7
Text Datei von Delphi Programm an einen Linux PC senden
Hallo zusammen,
gestern habe ich ![]() |
AW: Text Datei von Delphi Programm an einen Linux PC senden
.. hat lockbox da nicht etwas im Angebot?
Die Putty.exe oder plink.exe könnte meines Wissen auch für SSH/SFTP genuzt werden. Grüße Klaus |
AW: Text Datei von Delphi Programm an einen Linux PC senden
Wie würde ich dann mit über meine Delphi App mit Putty oder plink kommunizieren? Es muss alles über die Delphi App laufen.
|
AW: Text Datei von Delphi Programm an einen Linux PC senden
|
AW: Text Datei von Delphi Programm an einen Linux PC senden
Zitat:
|
AW: Text Datei von Delphi Programm an einen Linux PC senden
Zitat:
Grüße Klaus |
AW: Text Datei von Delphi Programm an einen Linux PC senden
Zitat:
Der Threadersteller schrieb "Linux Rechner über Ethernet", schätze die Rechner sind lokal im LAN. Notfalls kann die Datei vor dem Versenden auch verschlüsselt werden. |
AW: Text Datei von Delphi Programm an einen Linux PC senden
Die Rechner sind direkt mit einem Ethernetkabel miteinander verbunden. Kann ich die Komponente von "Daliuz" in D7 benutzen obwohl es mit Delphi 2005 geschrieben wurde?
|
AW: Text Datei von Delphi Programm an einen Linux PC senden
Mal eine andere Idee:
Wenn es immer der selbe Linux-PC ist, spricht aus meiner Sicht nichts gegen eine Freigabe eines Linux-Ordners an das Windows. Dadurch sollte es über Standardwege möglich sein, die Textdatei direkt zu speichern. (...SaveToFile()...) Zur Freigabe von Ordnern zwischen Linux und Windows findet man mit etwas gegoogle recht schnell Hinweise und Anleitungen. |
AW: Text Datei von Delphi Programm an einen Linux PC senden
Ich würde die ssh/plink Geschichte noch weiter verfolgen:
![]() Schaue mir gerade mal die Komponente von daliuz an; vielleicht kann die das ja/kann dafür erweitert werden (da sie ja plink benutzt...). :) Im Zweifel wäre scp an sich vermutlich der "modernere" Weg. Grade in Sachen Leitungssicherheit. FTP ist halt auf der Leitung lesbar. Zudem kommt das Argument dazu, dass auf der Ziellinuxkiste dann auch ein FTP-Server zusätzlich zum (vermutlich eh schon vorhandenen) sshd läuft. Dadurch wird sowohl die Angriffsfläche auf der Zielmaschine kleiner. Und man ist flexibler. Keine Ahnung, ob das auf deine Umgebung zutrifft...:thumb: Brighty |
AW: Text Datei von Delphi Programm an einen Linux PC senden
Es gibt nicht nur PuTTY und plink.exe sondern auch pscp.exe und psftp.exe. Letztere erlauben das Übertragen einzelner Dateien. Wenn es also nicht unbedingt im Programm fest integriert sein muss, bieten sich diese an. Kommt darauf an, wie häufig da Updates nötig sind.
Grüße Dalai |
AW: Text Datei von Delphi Programm an einen Linux PC senden
Genau. Klar, ein anderes Programm im Hintergrund starten und dann nur über Startparameter und die Pipe kontrollieren ist nicht immer schön. Andererseits, weil du grade auch das Thema Update erwähnst: Das ist dann auch sehr einfach zu updaten; grade weil das Interface zum arbeitenden Subsystem so "einfach" gestaltet ist. 8-)
Brighty |
AW: Text Datei von Delphi Programm an einen Linux PC senden
Pscp scheint ja alles zu sein was ich brauche. Meint ihr es wäre einfach machbar die plink Komponente für pscp umzuschreiben? Ich habe auch
![]() |
AW: Text Datei von Delphi Programm an einen Linux PC senden
Zitat:
![]() Also ja die pscp.exe reicht quasi für den Job. Wenn man sich den von dir verlinkten Quellcode anschaut, dann fällt auf, dass er den Befehl zum Starten der Exe einfach programmatisch zusammenbaut. :) Im Zweifel findest du hier auch noch ein wenig Dokumentation dazu: ![]() Brighty |
AW: Text Datei von Delphi Programm an einen Linux PC senden
Mir wurde jetzt auch gesagt, dass ich mit WinExec einfach die pscp.exe ausführen kann. Wäre das einfach möglich?
|
AW: Text Datei von Delphi Programm an einen Linux PC senden
Genau, das ist die Intention. Nur WinExec ist nur Zwecks Kompatibilität noch da (siehe
![]() Mehr Kontrolle (und moderner) geht es mit der Aufruffamilie um ![]() [Edit 1] Anders als putty (wo es ja um Interaktivität geht), brauchst du bei pscp grundsätzlich nicht das stdIn/Out des neuen Prozesses. Jedoch bist du vermutlich am Erfolg und des Fortschritts der Übertragung interessiert!? Ich habe das jetzt bei pscp nicht getestet; vielleicht kannst du grundsätzlichen Erfolg über den ExitCode von pscp herausfinden? Wenn du mehr Details brauchst, dann müsstest du dir gegebenenfalls StdOut besorgen und die Ausgabe in deinem Programm weiterverarbeiten. :) [/Edit] [Edit 2] Falls du das mit CreateProcess machen solltest, seien dir in der ![]() [/Edit] [Edit 3] Das Handle kannst du mit ![]() [/Edit] [Edit 4] Nachtrag: Artverwandtes Thema gefunden; ![]() [/Edit] Brighty |
AW: Text Datei von Delphi Programm an einen Linux PC senden
Ich habe es jetzt erstmal mit WinExec gemacht auch, wenn CreateProcess empfohlen ist. Mit WinExec ging es jetzt sehr einfach. Ich gucke mir aber, wenn ich mal Zeit habe an wie es mit CreateProcess geht. Vielen Dank an alle für die Antworten.
|
AW: Text Datei von Delphi Programm an einen Linux PC senden
Zitat:
|
AW: Text Datei von Delphi Programm an einen Linux PC senden
Zitat:
|
AW: Text Datei von Delphi Programm an einen Linux PC senden
Machst du es jetzt dann über den ExitCode von pscp? Was passiert, wenn du keine Verbindung zum Server aufbauen kannst? Merkt dein Programm das?
Brighty |
AW: Text Datei von Delphi Programm an einen Linux PC senden
Wir haben das mal ungefähr so gemacht:
Delphi-Quellcode:
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?
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; |
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? :|
|
AW: Text Datei von Delphi Programm an einen Linux PC senden
Bis jetzt habe ich den Erfolg noch gar nicht ausgewertet.
|
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 |
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?
|
AW: Text Datei von Delphi Programm an einen Linux PC senden
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz