Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.07.13;
Скачать: CL | DM;

Вниз

Как узнать статус завершения запущенной консольной программы?   Найти похожие ветки 

 
Franzy   (2008-06-09 19:09) [0]

Итак, я из своей программы запускаю другую (консольную) программу (с помощью CreateProcess). Эта консольная прога может завершить работу либо нормально, либо с ошибкой (речь идет не об ошибках типа деления на ноль, а о "своих" ошибках, типа неправильно переданных параметров и т.п.) Как мне лучше всего узнать, как завершилась консольная программа?

В старые добрые времена ДОС, когда программа завершалась с помощью halt(errorcode), это можно было сделать с помощью системной переменной ERRORLEVEL. Как это делается теперь, во времена Windows?


 
Поросенок Винни-Пух ©   (2008-06-09 19:12) [1]

Гетпроцессэкзиткоде


 
Поросенок Винни-Пух ©   (2008-06-09 19:13) [2]

Точнее гетэкзиткодепроцесс


 
Юрий Зотов ©   (2008-06-09 19:19) [3]

1. Запускаемая программа должна передавать системе код своего возврата. Если программа Ваша, то это можно сделать тем же Halt. Если нет - смотрите ее документацию. Не факт, что она вообще это делает.

2. После вызова CreateProcess надо дождаться завершения программы (WaitForSingleObject) и получить ее код возврата (GetExitCodeProcess).


 
Franzy   (2008-06-09 23:12) [4]

2Юрий Зотов

Спасибо!


 
Anatoly Podgoretsky ©   (2008-06-09 23:58) [5]


> В старые добрые времена ДОС, когда программа завершалась
> с помощью halt(errorcode), это можно было сделать с помощью
> системной переменной ERRORLEVEL. Как это делается теперь,
>  во времена Windows?

Так и делается, ничего не изменилось.


 
Franzy   (2008-06-10 15:12) [6]

Черт, никак не разберусь с типами! Что за LPDWORD такой?! У него какой аналог в Дельфи?

Приведите пример использования, пожалуйста. Вот фрагмент из моей проги:

var si:STARTUPINFO;
   pi:PROCESS_INFORMATION;
   cmdline: string;
   flag : boolean;
   //errorcode: lpdword;
begin

 SaveProject(curproject);
 ZeroMemory(@si,sizeof(si));
 si.cb:=SizeOf(si);
 cmdline:="gridder2D.exe "+curproject;
 flag:=true;
 if not CreateProcess( nil, // No module name (use command line).
    PChar(cmdline),  // Command line.
    nil,             // Process handle not inheritable.
    nil,             // Thread handle not inheritable.
    False,           // Set handle inheritance to FALSE.
    0,               // No creation flags.
    nil,             // Use parent"s environment block.
    nil,             // Use parent"s starting directory.
    si,              // Pointer to STARTUPINFO structure.
    pi )             // Pointer to PROCESS_INFORMATION structure.
 then
   begin
     ShowMessage("Не удалось запустить процесс!");
     flag:=false;
   end;

 if flag then
  begin
   WaitForSingleObject( pi.hProcess, INFINITE );
   GetExitCodeProcess( pi.hProcess, errorcode); //????????
   CloseHandle( pi.hProcess );
   CloseHandle( pi.hThread );

   ShowMessage(inttostr(errorcode)); //debug

   //read data
   readdata();

   ShowMessage("Готово!");
  end;


 
Германн ©   (2008-06-10 15:18) [7]

LPDWORD = PDWORD
PDWORW = ^DWORD

См. Windows.pas


 
Anatoly Podgoretsky ©   (2008-06-10 15:20) [8]

> Franzy  (10.06.2008 15:12:06)  [6]

^Longword


 
Franzy   (2008-06-10 15:59) [9]

Неполучается. Я, наверно, как-то не так использую указатель. Какой тип не указываю, всегда пишет

[Error] main.pas(773): Types of actual and formal var parameters must be identical.

Покажите пример, как надо делать, пожалуйста.


 
Palladin ©   (2008-06-10 16:01) [10]

надо смотреть, как функция объявлена в windows.pas, а не то что про нее пишут в Windows SDK


 
Franzy   (2008-06-10 16:32) [11]

2Palladin

Спасибо! Там и в самом деле просто dword :) Все заработало.



Страницы: 1 вся ветка

Текущий архив: 2008.07.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
15-1211675216
MerCus
2008-05-25 04:26
2008.07.13
TCHARTFX


2-1213386637
MaryM
2008-06-13 23:50
2008.07.13
SynEdit и Delphi 2007


8-1183039452
wind1
2007-06-28 18:04
2008.07.13
Отображение .avi файлов


2-1213603321
Dmitry
2008-06-16 12:02
2008.07.13
#13#10


15-1212225113
Григорьев Антон
2008-05-31 13:11
2008.07.13
Как отучить висту лезть в чужую сеть?