![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ожидание завершения программы из сервиса
race1 © (2007-09-10 10:41:00)Мне надо запустить из сервиса программу и после какого-то времени, если программа не завершится, убить её. Сделал тестовое приложение как vcl form app, всё работает.
Вот код:
var
si: TStartupInfo;
pi: TProcessInformation;
begin
ZeroMemory(@si, SizeOf(si));
si.cb := SizeOf(si);
CreateProcess(PChar(ProgramName), PChar(ProgramParams), nil, nil, FALSE, 0, nil, nil, si, &pi);
if WaitForSingleObject(pi.hProcess, 60000) WAIT_OBJECT_0 then
TerminateProcess(pi.hProcess, 1);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
...
Сделал запуск и ожидание в сервисе - WaitForSingleObject завершается сразу, и говорит "WAIT_OBJECT_0", хотя запущенная программа работает. Если узнать код возврата (GetExitCodeProcess(pi.hProcess, &ret)), то ret будет единицей.
Сергей М. (2007-09-10 11:01:00) [21]
> говорит "WAIT_OBJECT_0", хотя запущенная программа работает
Так не бывает.
WAIT_OBJECT_0 однозначно говорит, что интересующий процесс завершился.
Anatoly Podgoretsky (2007-09-10 10:59:00) [22]> race1 (10.09.2007 10:54:05) [5]
А зачем нам обсуждать заведомо не реальный код.
Может ты Кеннеди убил и "мамой клянусь - это не я"
clickmaker (2007-09-10 10:57:00) [23]
> Батник может быть написан криво, например, там будет команда
> pause
а почему бы не писать батник прямо?
программы для работы под ковром всеж-таки должны отличаться от интерактивных, разве нет?
race1 (2007-09-10 10:54:00) [24]CreateProcess работает, я же говорю, в реальном коде есть проверка ошибок. CreateProcess возвращает true.
Reindeer Moss Eater (2007-09-10 10:50:00) [25]Обработка возвращаемых значений опущена
Гетластеррор вызывал после того, как createprocess вернул тебе False?
Ну и фик ли ты хочешь?
race1 (2007-09-10 10:49:00) [26]>Reindeer Moss Eater
Обработка возвращаемых значений опущена
>clickmaker
Есть задание, которое надо выполнять с заданной периодичностью (раз в две минуты, например), надо вызывать батник во время выполнения задания. Батник может быть написан криво, например, там будет команда pause. Т.е. остальных итераций не будет и сервис тупо повиснет.
Reindeer Moss Eater (2007-09-10 10:42:00) [27]CreateProcess - это функция
clickmaker (2007-09-10 10:42:00) [28]
> Мне надо запустить из сервиса программу
зачем? она что должна сделать?