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

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

Подскажите про использование CreateProcess... [D6, XP]


Страницы:   1 2

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


Страницы:   1 2

Наверх

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