![]() |
Re: Delphi Programm, im hintegrund cmd-befehle
Zitat:
du musst halt die ausgabe der cmd zu deinem programm umlenken, dann kannst du nachschauen ob das funktioniert hat. edit: schau dir mal das hier an:
Delphi-Quellcode:
ist aber glaub ich auch mit sichtbarem fenster
procedure CaptureDos(command: String; Stringsp: TStrings);
const CaptureBufferSize = 2500; var SecAttrib : TSecurityAttributes; ReadPipe,writePipe : THandle; Startup : TStartUpInfo; ProcessInfo : TProcessInformation; CaptureBuffer : Pchar; BytesRead : DWord; WaitHandle : DWord; begin Stringsp.clear; With SecAttrib do begin nlength := SizeOf(TSecurityAttributes); binherithandle := true; lpsecuritydescriptor := nil; end; if Createpipe (ReadPipe, writePipe, @SecAttrib, 0) then begin CaptureBuffer := AllocMem(CaptureBufferSize + 1); FillChar(Startup,Sizeof(Startup),#0); Startup.cb := SizeOf(Startup); Startup.hStdOutput := writePipe; Startup.hStdInput := ReadPipe; Startup.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW; Startup.wShowWindow := SW_HIDE; if CreateProcess(nil, PChar(command), @SecAttrib, @SecAttrib, true, NORMAL_PRIORITY_CLASS, nil, nil, Startup, ProcessInfo) then begin repeat WaitHandle := WaitForSingleObject( ProcessInfo.hProcess,100); Application.ProcessMessages; until (WaitHandle <> WAIT_TIMEOUT) or application.terminated; if not application.terminated then Repeat BytesRead := 0; ReadFile(ReadPipe,CaptureBuffer[0],CaptureBufferSize,BytesRead,nil); CaptureBuffer[BytesRead]:= #0; OemToAnsi(CaptureBuffer,CaptureBuffer); Stringsp.Text := Stringsp.Text+String(CaptureBuffer); until (BytesRead < CaptureBufferSize); end else Stringsp.add('Fehler!'); FreeMem(CaptureBuffer); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); CloseHandle(ReadPipe); CloseHandle(writePipe); end else Stringsp.add('Konnte Dos Kommando nicht starten, Fehler: #' +inttostr(getlasterror)); end; |
Re: Delphi Programm, im hintegrund cmd-befehle
Damit bist Du nun aber ein paar Posts zu spät ;)
|
Re: Delphi Programm, im hintegrund cmd-befehle
Zitat:
Zitat:
|
Re: Delphi Programm, im hintegrund cmd-befehle
coole Procedure, aber ich bekomme einen Fehler wenn ich das ausführen möchte:
Delphi-Quellcode:
CaptureDos('/C del C:\test.exe', Memo1.Lines );
// das funktioniert auch nicht... CaptureDos('del C:\test.exe', Memo1.Lines ); // er schreibt in beiden fällen, in die Memo, "Fehler!" |
Re: Delphi Programm, im hintegrund cmd-befehle
Memo.Lines ist auch eine Property, welche du nicht als Var-Parameter übergeben kannst.
|
Re: Delphi Programm, im hintegrund cmd-befehle
Ich frage mich nur die ganze Zeit, wieso er nicht einfach DeleteFile bemüht, anstatt mit DOS-Befehlen herumzuhantieren.
|
Re: Delphi Programm, im hintegrund cmd-befehle
warum schreibt er es dann in die Memo rein?
@DeddyH weil ich auch noch andere befehle absätzen möchte... |
Re: Delphi Programm, im hintegrund cmd-befehle
Zitat:
|
Re: Delphi Programm, im hintegrund cmd-befehle
ja das glaube ich alles,
aber bei 100 verschiedenen befehlen, aht man warscheinlich 500 Zeilen Quellcode! |
Re: Delphi Programm, im hintegrund cmd-befehle
Hallo,
Ich habe ein Problem mit CreateProcess. Mein Programm ließt eine Batch-Datei aus und startet dann jede Commandozeile in einem eigenen Prozess. Die Befehle in der Batch:
Delphi-Quellcode:
Auf meinem EntwicklungsPC wird meine protocol.xml auch gelöscht und eine neue Protocol.xml aus dem Logfile erstellt. Wenn ich meine Anwendung auf einem anderen PC laufen lasse bekomme ich eine Fehlermeldung bei dem CreateProcess und zwar: eine Dialogbox :"Systemfehler. Code: 5. Zugriff verweigert ".
rm %umg_variab%\protocol.xml
%umg_variab%\altovaXSLT2.exe -xml %umg_variab%\protocol.log -xsl %umg_variab%\protocol.xslt -out %umg_variab%\protocol.xml Was ich ausschließen kann: -Umgebungsvariable nicht gesetzt -Keine OpenUserrechte auf Festplatte -Datei nicht vorhanden Muss ich irgendwas auf dem PC installieren? Das Framework 1.1 ist auf dem Ziel PC Installiert und sonst auch die gleiche Software nur die Delphi 7 IDE fehlt, also kann ich nicht debuggen.
Delphi-Quellcode:
if not CreateProcess(
nil, //PChar(CommandLine), PChar(strDummy), nil, nil, True, ProPri, // and CREATE_NEW_CONSOLE, nil, nil, StartupInfo, ProcessInfo) //in strdummy steht genau eine Zeile aus der oben genannten Batch |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 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 by Thomas Breitkreuz