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

Вниз

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

 
jav   (2003-08-04 17:52) [0]

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


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

ИМХО CreateProcess!


 
Evgeny V ©   (2003-08-05 05:35) [2]

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


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

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


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

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


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

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


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

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


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

jav (05.08.03 17:24)

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


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

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


 
Polevi ©   (2003-08-06 09:16) [9]

ничего :)


 
jav   (2003-08-07 08:32) [10]

Привожу выдержку из справочной системы 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 и функциях иже с ним,, я бы не спрашивал - правда логично?


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

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-11 08:30) [12]

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


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

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



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

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

Наверх




Память: 0.49 MB
Время: 0.019 c
14-40630
Mystic
2003-09-24 16:19
2003.10.13
Анекдоты и истории про музыку...


1-40343
PsoFT
2003-10-02 02:05
2003.10.13
handle


14-40663
KIR
2003-09-17 13:17
2003.10.13
Кодировка текста в macromedia


3-40261
Lika
2003-09-23 09:27
2003.10.13
SQL


4-40717
k@rt
2003-08-10 02:40
2003.10.13
StatusBar