![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получение кода возврата процесса из консольного приложения
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!