![]() |
Модераторы: Akina |
![]() ![]() ![]() |
|
Fon |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.7.2005 Репутация: нет Всего: нет |
Доброе время суток.
Подскажите, может кто-то с чем-то подобным сталкивался: нужно запустить консольное приложение используя CreateProcess. Приложение должно работать в фоновом режиме, т.е. кронсоль после запуска не должна появляться, также нужно отследить окончание его работы. Вот код который я использую для реализации этого:
Все хорошо работает под Win2000, WinXP но отказывается работать под Win98 - CreateProcess вызвращает 0 соответственно процесс не может создаться... Всем спасибо. |
|||
|
||||
Kergan |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.8.2005 Репутация: 3 Всего: 5 |
GetLastError что выдает?
--------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :( |
|||
|
||||
Fon |
|
||||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.7.2005 Репутация: нет Всего: нет |
Добавил в код вызов GetLastError
GetLastError возвращает, что все ОК The operation completed successfully!!! Но, вот парадокс CreateProcessA не выполняется, возвращает 0, соответственно ничего не происходит! Возможно дело в запускаемом приложении... Я запускаю osql для выполнения скрипта на сервере. Вот примерный вид строки
Что не так, не пойму... |
||||
|
|||||
Kergan |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.8.2005 Репутация: 3 Всего: 5 |
Оригинально... А с другими приложениями пробовал? С чем-нибудь простеньким - cmd.exe, блокнот, калькулятор...
PS А почему именно CreateProcess? можно Shell или ShellExecute? --------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :( |
|||
|
||||
Fon |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.7.2005 Репутация: нет Всего: нет |
С другими тоже пробовал, не получается........,
причем пробовал на разных компюьтерах с 98 виндой...... CreateProcess потому что, мне нужно скрыть окно и отследить завершение работы запускаемой программы. Это сообщение отредактировал(а) Fon - 18.11.2005, 10:18 |
|||
|
||||
Kergan |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.8.2005 Репутация: 3 Всего: 5 |
Будем пробовать ShellExecute...
Там последний параметр - как отображать окно программы, его делаешь SW_HIDE. \Поэксперементируй!\ Ну, по поводу ожидания завершения - этот фокус можно с любым процессом проделать - получить его хэндл при помощи OpenProcess Эта функция потребует идентификатор PID процесса - его тоже получить несложно при помощи функций toolhelp (перечисления процессов). и потом, как ты и написал, WaitForSingleObject Если нужно подробнее, пиши. --------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :( |
|||
|
||||
Kergan |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.8.2005 Репутация: 3 Всего: 5 |
Вот, что-то типа этого... Это сообщение отредактировал(а) Kergan - 18.11.2005, 12:45 --------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :( |
|||
|
||||
Fon |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 9.7.2005 Репутация: нет Всего: нет |
О, супер, спасибо!!!
Кажеться в таком варианте все работает! Слушай, правда, я почитал МСДН и у меня возник еще один вопрос по теме: при описании ф-ции OpenProcess описываются значения парамметра dwDesiredAccess. В нашем случае используется SYNCHRONIZE, т.к. нам нужно будет отслеживать окончание работы программы. Вопрос в следующем: при описании SYNCHRONIZE около него стоит метка "Windows NT/2000", не будет ли это означать, что такое значение dwDesiredAccess не поддерживается Вин98? Это сообщение отредактировал(а) Fon - 18.11.2005, 15:49 |
|||
|
||||
Kergan |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 20.8.2005 Репутация: 3 Всего: 5 |
Открой с приоритетом не SYNCHRONIZE, а PROCESS_ALL_ACCESS... если винда даст... Это даст тебе ПОЛНЫЙ контроль над процессом. виндовоз 98 не должен возмущаться, если есть права админа.
PS вот пример, тестированный в 2000 и XP (там прямо внутри код) Извлекаешь оба exe-файла в одну диру, запускаешь PR1.exe, он запускает PR2.exe (там на форме будет написано "Закрой это окно"), потом сообщение о том, что окно открылось + идентификатор процесса PR2. Закрой PR2 и будет сообщение о закрытии ОТ PR1. До того, как ты закроешь PR2, PR1 будет недоступна (курсорчик часами). Это сообщение отредактировал(а) Kergan - 18.11.2005, 16:26 Присоединённый файл ( Кол-во скачиваний: 1 ) ![]() --------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :( |
|||
|
||||
![]() ![]() ![]() |
Правила форума "VB6" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB6 | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |