Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получение кода возврата процесса из консольного приложения


jav ©   (2003-08-04 17:52:00) 

Требуется запустить процесс (внешнюю программу) на выпонение и получить код возврата программы для последующей обработки. При этом необходимо дождаться окончания процесса...


Игорь Шевченко   (2003-08-11 12:58:00) [1]

А код возврата, очевидно, возвращается вызовом GetExitCodeProcess


jav   (2003-08-11 08:30:00) [2]

Виноват... WaitForSingleObject и
WaitForInputIdle - на первое не натыкался, и почел желаемое за действительное... :)
Благодарствую! (хотя код возврата Вы мне так и не вернули... но это уже не важно!)


Игорь Шевченко   (2003-08-07 09:40:00) [3]

WaitForSingleObject
и
WaitForInputIdle

- какие уж тут комментарии :)

Вот пример запуска консольного приложения и ожидания его завершения:
procedure TfMain.DumpFile(const FileName : String);
var
ShellInfo : TShellExecuteInfo;
ParamsString : String;
begin
ParamsString := Format("-em %s %s.aaa", [FileName, FileName]);
ShellInfo.cbSize := SizeOf(ShellInfo);
ShellInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
ShellInfo.Wnd := Handle;
ShellInfo.lpVerb := "open";
ShellInfo.lpFile := "tdump";
ShellInfo.lpParameters := PChar(ParamsString);
ShellInfo.lpDirectory := nil;
ShellInfo.nShow := SW_SHOW;
if NOT ShellExecuteEx(@ShellInfo) then
RaiseLastWin32Error();
if ShellInfo.hProcess <> 0 then
try
WaitForSingleObjectEx(ShellInfo.hProcess, INFINITE, false);
finally
( ShellInfo.hProcess)

WaitForSingleObject
и
WaitForInputIdle

- какие уж тут комментарии :)

Вот пример запуска консольного приложения и ожидания его завершения:
procedure TfMain.DumpFile(const FileName : String);
var
ShellInfo : TShellExecuteInfo;
ParamsString : String;
begin
ParamsString := Format("-em %s %s.aaa", [FileName, FileName]);
ShellInfo.cbSize := SizeOf(ShellInfo);
ShellInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
ShellInfo.Wnd := Handle;
ShellInfo.lpVerb := "open";
ShellInfo.lpFile := "tdump";
ShellInfo.lpParameters := PChar(ParamsString);
ShellInfo.lpDirectory := nil;
ShellInfo.nShow := SW_SHOW;
if NOT ShellExecuteEx(@ShellInfo) then
RaiseLastWin32Error();
if ShellInfo.hProcess <> 0 then
try
WaitForSingleObjectEx(ShellInfo.hProcess, INFINITE, false);
finally
CloseHandle(ShellInfo.hProcess);
end;
end;


jav   (2003-08-07 08:32:00) [4]

Привожу выдержку из справочной системы Delphi7 Windows SDK...

[cut]
The WaitForInputIdle function waits until the given process is waiting for user input with no input pending, or until the time-out interval has elapsed.

The WaitForInputIdle function only works with GUI applications. If a console application calls the function, it returns immediately, with no wait.
[cut]

Прокоментируйте, пожалуйста... :) (Polevi, Игорь Шевченко)
>HolACost_ Чтобы попробывать надо иметь на это время (его пока нет, а мне легче спросить...) Тем более, что я не "утверждаю", а воспрошаю - почувсвуйте разницу... Был бы я достаточно осведомлен в CreateProcess и функциях иже с ним,, я бы не спрашивал - правда логично?


Polevi   (2003-08-06 09:16:00) [5]

ничего :)


Игорь Шевченко   (2003-08-05 18:09:00) [6]

Извиняюсь за оффтопик, но нельзя ли узнать, что именно написано
в " (источник - Справочная система Delphi) " про WaitForSingleObject и консольные приложения ?


Игорь Шевченко   (2003-08-05 18:08:00) [7]

jav (05.08.03 17:24)

Можно верить. Но справочной системе Windows SDK


HolACost_   (2003-08-05 17:29:00) [8]

Ага! Смотря что вы в качестве объекта синхронизации засовывали в функцию!
А верить или нет - это ваш выбор - но надо было проверить сначала, чем утверждать обратное!


jav   (2003-08-05 17:24:00) [9]

>Игорь Шевченко - хотите сказать, что справочной системе можно не верить?


Игорь Шевченко   (2003-08-05 16:56:00) [10]

Работает и прекрасно, в том числе и для консольных приложений


jav   (2003-08-05 16:20:00) [11]

CreateProcess - это ясно и так... Приложение консоль - для него WaitForSingleObject не работает... (источник - Справочная система Delphi) Есть еще варианты? :)


Evgeny V   (2003-08-05 05:35:00) [12]

Еще к CreateProcess добавлю WaitForSingleObject - ожидание завершения и GetExitCodeProcess


HolACost   (2003-08-04 19:53:00) [13]

ИМХО CreateProcess!


Наверх

Титульная страница Поиск, карта сайта Написать письмо