Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Delphi Programm, im hintegrund cmd-befehle (https://www.delphipraxis.net/104605-delphi-programm-im-hintegrund-cmd-befehle.html)

dominikkv 7. Dez 2007 19:25

Re: Delphi Programm, im hintegrund cmd-befehle
 
Zitat:

Zitat von DeddyH
Wenn der Rückgabewert von ShellExecute > 32 ist, hat die Ausführung an sich funktioniert, sofern ich die Hilfe richtig lesen kann.

ja das ausführen der cmd hat ja funktioniert... was ihr wollt ist die ausgabe der cmd, nicht die ausgabe von shellexecute :wink:
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:
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;
ist aber glaub ich auch mit sichtbarem fenster

DeddyH 7. Dez 2007 19:27

Re: Delphi Programm, im hintegrund cmd-befehle
 
Damit bist Du nun aber ein paar Posts zu spät ;)

dominikkv 7. Dez 2007 20:19

Re: Delphi Programm, im hintegrund cmd-befehle
 
Zitat:

Zitat von DeddyH
Damit bist Du nun aber ein paar Posts zu spät ;)

wollt nur mal anmerken :twisted: :warn:

Zitat:

Zitat von dominikkv
ist aber glaub ich auch mit sichtbarem fenster

haha pustekuchen... das ist genau das was du suchst :hi:

Eppos 10. Dez 2007 11:59

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!"

mkinzler 10. Dez 2007 12:01

Re: Delphi Programm, im hintegrund cmd-befehle
 
Memo.Lines ist auch eine Property, welche du nicht als Var-Parameter übergeben kannst.

DeddyH 10. Dez 2007 12:10

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.

Eppos 10. Dez 2007 12:11

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

DeddyH 10. Dez 2007 12:12

Re: Delphi Programm, im hintegrund cmd-befehle
 
Zitat:

Zitat von Eppos
@DeddyH
weil ich auch noch andere befehle absätzen möchte...

Und auch für die wird es wahrscheinlich entsprechende Methoden geben.

Eppos 10. Dez 2007 12:39

Re: Delphi Programm, im hintegrund cmd-befehle
 
ja das glaube ich alles,

aber bei 100 verschiedenen befehlen, aht man warscheinlich 500 Zeilen Quellcode!

aegidos 21. Jan 2008 11:41

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:
rm %umg_variab%\protocol.xml
%umg_variab%\altovaXSLT2.exe -xml %umg_variab%\protocol.log -xsl %umg_variab%\protocol.xslt -out %umg_variab%\protocol.xml
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 ".

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.
Seite 4 von 5   « Erste     234 5      

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