Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Was bedeutet ExitCode=1 bei cmd.exe (https://www.delphipraxis.net/120827-bedeutet-exitcode%3D1-bei-cmd-exe.html)

alleinherrscher 17. Sep 2008 11:30


Was bedeutet ExitCode=1 bei cmd.exe
 
Hi@all!

Habe hier ein Programm, was eine Konsole piped. Leider bekomme ich seit neuestem in der Schleife, die abfragt, ob die CMD.exe noch läuft (GetExitCodeProcess soll STILL_ACTIVE=259 zurückliefern) immer den Exitcode 1 heraus.

Kann mit jemand sagen, was exitcode 1 bei der cmd.exe bedeutet? Ich finde da nix zu...


Danke im Vorraus!

//edit: ich hab mal den entsprechenden Code angehängt:

Delphi-Quellcode:
procedure RC_Run(Command: string);
const bufsize=1024; // 1KByte buffer
var
  buf: array [0..bufsize-1] of char;
  si: tSTARTUPINFO;
  sa: tSECURITYATTRIBUTES;
  sd: tSECURITYDESCRIPTOR;
  pi: tPROCESSINFORMATION;
  newstdin, newstdout, read_stdout, write_stdin: tHandle;
  bread, avail: dword;
begin
  // Configuraciones de seguridad para WinNT
  if IsWinNT then begin
    InitializeSecurityDescriptor(@sd, SECURITY_DESCRIPTOR_REVISION);
    SetSecurityDescriptorDacl(@sd, true, nil, false);
    sa.lpSecurityDescriptor:=@sd;
  end else sa.lpSecurityDescriptor:=nil;
  // Creamos Pipe A
  if not CreatePipe(newstdin, write_stdin, @sa, 0) then begin
    RC_LineOut('Error creating Pipe A');
    exit;
  end;
  // Creamos Pipe B
  if not CreatePipe(read_stdout, newstdout, @sa, 0) then begin
    RC_LineOut('Error creating Pipe B');
    CloseHandle(newstdin);
    CloseHandle(write_stdin);
    exit;
  end;
  // Configuramos si
  GetStartupInfo(si);
  si.dwFlags:=STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
  si.wShowWindow:=SW_HIDE;
  si.hStdOutput:=newstdout;
  si.hStdError:=newstdout;
  si.hStdInput:=newstdin;
  // Creamos proceso
  ExeName:=extractfilename(command);
  if not CreateProcess(pchar(command), nil, nil, nil, true,
    CREATE_NEW_CONSOLE, nil, nil, si, pi) then begin
    RC_LineOut('Error creating process: '+command);
    CloseHandle(newstdin);
    CloseHandle(newstdout);
    CloseHandle(read_stdout);
    CloseHandle(write_stdin);
    exit;
  end;
  // Loop principal
  fillchar(buf, sizeof(buf), 0);
  RC_End:=false;
  RC_SendBuf:='';
  RC_ExitCode:=STILL_ACTIVE;
  repeat
    //application.processmessages;
    sleep(50);
    Application.HandleMessage;
    GetExitCodeProcess(pi.hProcess, RC_ExitCode); //RC_ExitCode=1

    if (RC_ExitCode<>STILL_ACTIVE) then RC_End:=True;
    if (RC_ExitCode=WM_QUIT) then showmessage(inttostr(RC_ExitCode));

    PeekNamedPipe(read_stdout, @buf, bufsize, @bread, @avail, nil);
    // Comprobamos texto de salida
    if (bread<>0) then begin
      fillchar(buf, bufsize, 0);
      if (avail>bufsize) then
        while (bread>=bufsize) do begin
          ReadFile(read_stdout, buf, bufsize, bread, nil);
          SplitLines(buf);
          fillchar(buf, bufsize, 0);
        end
      else begin
        ReadFile(read_stdout, buf, bufsize, bread, nil);
        SplitLines(buf);
      end;
    end;
    // Comprobamos texto de entrada
    while (Length(RC_SendBuf)>0) do begin
      WriteFile(write_stdin, RC_SendBuf[1], 1, bread, nil);
      Delete(RC_SendBuf, 1, 1);
    end;
  until RC_End;
  // Cerramos las cosas

  CloseHandle(pi.hThread);
  CloseHandle(pi.hProcess);
  CloseHandle(newstdin);
  CloseHandle(newstdout);
  CloseHandle(read_stdout);
  CloseHandle(write_stdin);
end; // RC_Run

nahpets 17. Sep 2008 13:38

Re: Was bedeutet ExitCode=1 bei cmd.exe
 
Hallo,

cmd gibt als Exitcode eigentlich den Exitcode des Programmes zurück, dass in der cmd gestartet wurde.
Was ruft Deine cmd auf, wovon Du die Ausgabe haben willst? Liegt das Problem eventuell dort?

Stephan

alleinherrscher 17. Sep 2008 16:52

Re: Was bedeutet ExitCode=1 bei cmd.exe
 
Hm, naja, eig. starte ich nur die cmd.exe weil ich Ihre Ausgabe weiterleite. Aber es war wohl eine Sache der Kompilereinstellungen. Jetzt läuft der selbe Programmcode auf einmal wieder von Geisterhand. Trotzdem danke :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 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