![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите про использование CreateProcess... [D6, XP]
vegarulez © (2007-04-17 07:56:00)Хочу использовать вызов батника, и ещё одного *.ехе из своей проги. по таймеру. Но нужно знать завершил ли работу батник и экзешник, для этого хочу пользовать не WinExec (как сечас пользую), а CreateProcess, чтобы можно было опрашивать состояние, завершил ли уже работу батник и экзешник. Чтобы запускать их только в том случае если их уже нет. Но в CreateProcess столько параметров... прям запутался... Если можно дайте какой нить кусочек кода с вызовом, и опросом состояния - чтобы понять что к чему. И если есть ссыль на хорошее описание - тоже просьба поделиться.
vegarulez (2007-04-28 07:08:00) [1]Удалено модератором
Примечание: Создание пустых сообщений
vegarulez (2007-04-20 07:00:00) [2]Моей.
ANB (2007-04-19 13:32:00) [3]
> Также хочу спросить какой коммандой можно проверить что
> процесс, или приложение запущено и работает?...
Запущено твоей программой или отдельно ?
vegarulez (2007-04-19 12:27:00) [4]up
vegarulez (2007-04-19 08:36:00) [5]Также хочу спросить какой коммандой можно проверить что процесс, или приложение запущено и работает?...
vegarulez (2007-04-19 06:56:00) [6]
> Игорь Шевченко © (18.04.07 13:45) [26]
А можно попдробней что это и с чем едят?... если можно то ссыль на описание.
Игорь Шевченко (2007-04-18 13:45:00) [7]
> Реально мне требуется запускать батник и экзешник, но только
> в том случае если они уже отработали и закрылись и сами
> закрылись
если это твой EXEшник - создавай в нем mutex, например
Leonid Troyanovsky (2007-04-18 13:30:00) [8]
> Desdechado © (18.04.07 12:07) [20]
> 1. Написано же чем-то точней.
Дык, надо было "хоть в чем-то точней" :)
Ладно, не дуйся, получилось может и занудно,
но надеюсь, что полезно.
--
Regards, LVT.
vegarulez (2007-04-18 13:26:00) [9]
> Игорь Шевченко © (18.04.07 13:08) [22]
> в) а нафига тебе куча блокнотов ?
Я на них тренируюсь, т.к. до этого не работал с CreateProcess :)
Реально мне требуется запускать батник и экзешник, но только в том случае если они уже отработали и закрылись и сами закрылись.... Поэтому я сначала их хочу с помощью креате процесса создавать чтобы контролировать состояние их работы... и если требуется убивать. Если же их нет(уже отработали или убились), то запускать.
Desdechado (2007-04-18 13:08:00) [10]BOOL TerminateProcess(hProcess, uExitCode)
HANDLE hProcess; /* handle to the process */
UINT uExitCode; /* exit code for the process */
The TerminateProcess function terminates the given process and all of its threads.
Игорь Шевченко (2007-04-18 13:08:00) [11]
> т.е. эта команда CloseHandle - убивает тока хендл, но не
> зарубает процесс или приложение. Так? ...
в данном случае так.
> 1. какой комндой можно отследить что i-тый блокнот с j-ым
> хендлом ещё открыт... а раз открыт гоу -ту 2
FindWindow + GetWindowProcessId, учесть, что кроме handle возвращается еще и Id процесса.
> 2. как убить приложение до отчистки хендл (какой командой
> это сделать, передав в неё хендл, а уже потом его отчистив)?
>
а) послать окну сообщение WM_CLOSE
б) сказать TerminateProcess
в) а нафига тебе куча блокнотов ?
vegarulez (2007-04-18 13:02:00) [12]Так всё таки - блокноты остаются живыми
при
//WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
т.е. эта команда CloseHandle - убивает тока хендл, но не зарубает процесс или приложение. Так? ...
Тогда ещё пара вопросов попутно:
1. какой комндой можно отследить что i-тый блокнот с j-ым хендлом ещё открыт... а раз открыт гоу -ту 2
2. как убить приложение до отчистки хендл (какой командой это сделать, передав в неё хендл, а уже потом его отчистив)?
Desdechado (2007-04-18 12:07:00) [13]Leonid Troyanovsky © (18.04.07 11:52) [18]
1. Написано же чем-то точней.
2. Ну ты формалист. Я же смайл поставил.
Leonid Troyanovsky (2007-04-18 11:54:00) [14]
> Desdechado © (18.04.07 11:30) [15]
> Ну, в моем он еще используется для ожидания окончания, поэтому,
> наверно, не сразу после создания, а сразу после завершения
> ожидания.
Ты использовал хендл процесса, хендл потока можно закрыть сразу.
--
Regards, LVT.
Leonid Troyanovsky (2007-04-18 11:52:00) [15]
> Desdechado © (18.04.07 11:30) [15]
> > В этом примере, как минимум, не ясно отчего CreateProcess
> не добился успеха
> Ага, значит, мой пример чем-то все-таки точней, а то
Для уточнения ему бы хватило: Win32Check(CreateProcess(..));
твой же исходный вариант потребовал больше уточнений.
--
Regards, LVT.
Игорь Шевченко (2007-04-18 11:48:00) [16]
> при создании нового блокнота хендлы предыдущих грохаются?
> получается так?
handle имеет смысл только в твоей программе.
vegarulez (2007-04-18 11:36:00) [17]Кстати я не совсем понимаю... почему
...
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
...
Не убивают процесс???... Они только Хендлы грохают чтоли???
потому как я использую в качестве теста блокнот cmdline:='c:\windows\notepad.exe';
и комментирую
//WaitForSingleObject( pi.hProcess, INFINITE );
Когда WaitForSingleObject( pi.hProcess, INFINITE ); не закоментарен - то программа начинает работать только после закрытия блокнота. Когда закоментарен она работает всегда - и создаёт "блокноты", но вот вопрос...
при создании нового блокнота хендлы предыдущих грохаются? получается так?
Desdechado (2007-04-18 11:30:00) [18]> Возьми за правило закрывать. Хендл потока в рассмотренных примерах -
> сразу после удачного CreateProcess.
Ну, в моем он еще используется для ожидания окончания, поэтому, наверно, не сразу после создания, а сразу после завершения ожидания.
> В этом примере, как минимум, не ясно отчего CreateProcess не добился успеха
Ага, значит, мой пример чем-то все-таки точней, а то
> Leonid Troyanovsky © (17.04.07 13:14) [7]
> если ты приводишь свой вариант, отличный от FAQ, то он д.б. точней, полезней
;)
Игорь Шевченко (2007-04-18 10:57:00) [19]
> В данной беседе речь ведётся о вот этом примере из FAQ?
В этом примере, как минимум, неясно отчего CreateProcess не добился успеха
vegarulez (2007-04-18 09:04:00) [20]В данной беседе речь ведётся о вот этом примере из FAQ?
http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988621841&n=15