![]() |
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 |
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 |
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