| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Run exe as Service. |
| Автор: knut 27.2.2010, 20:17 | ||||
| добрый день. хочу запустить ехе как сервис. если приложение консольное то ехе без проблем запускается как сервис но вот если виндовс приложением проблема. получаю ошибку 1053 (The service did not respond to the start or control request in a timely fashion.) в чем проблема? вот сам код
|
| Автор: xvr 27.2.2010, 20:58 |
| Видимо проблема в D:\\simple.exe, а так же возможно в том, что его при каждом запуске этой программы пытаются установить заново (это пройдет только в первый раз, потом будет давать ошибки) |
| Автор: knut 27.2.2010, 21:06 |
| xvr, код каторый я привел и есть simple.exe. я вот чего не могу понять. если я создаю косольное преложение то у меня сервис стартуется нормально в вот с виндовс приложением у меня возникает эта проблема. |
| Автор: Artemon 27.2.2010, 21:49 |
| Если твое приложение использует некоторые элементы GUI, например иконку в таскбаре, то такое приложение невозможно запустить как сервис. |
| Автор: xvr 28.2.2010, 18:22 | ||
В таком случае в нем отсуствует то, что должно запускаться как сервис. См. функции RegisterServiceCtrlHandler, StartServiceCtrlDispatcher, SetServiceStatus Именно они определяют успех или неуспех запуска сервиса |
| Автор: knut 1.3.2010, 22:13 |
| xvr, Сервис запустить удалось. Но у меня вопрос. возможно ли поставить хук при запуске сервиса? у меня не как не получается. отдельно хук работает. |
| Автор: xvr 2.3.2010, 17:11 | ||||
Какой хук? И где его надо поставить?
|
| Автор: knut 2.3.2010, 21:52 | ||
| есть сервис и есть глобальный хук на клаву. надо.при старте сервиса установить хук. как я делаю.
сервис устанавливается нормально. вроди и хук устанавливается. но на нажатьие клавы не реагирует. p.s отдельно запускаю хук(без сервиса) работает отлично. |
| Автор: DrHex 3.3.2010, 11:31 |
| Библиотека не грузится? Или в сервисе MessageBox не вылетает? Если второе то у сервисов GUI нету... |
| Автор: xvr 3.3.2010, 13:15 |
| Попробуйте поставить хук в ServiceMain (а не в WinMain). Кроме того, все равно не видно, как именно ставится ХУК. Пока видно только, что грузится какая то dll. Учтите, что у сервиса будет свой десктоп и WinStation. Хук может быть будет работать именно на них, а не у пользователя |
| Автор: knut 3.3.2010, 18:58 | ||||||
ок код у меня большой вот и подумал лен будет вам разбираться в нем. вот сервис.
а вот сам хук
сервис нормально стартуется но хук не реагирует на нажатие клавы |
| Автор: xvr 4.3.2010, 21:42 | ||
Читаем описание LowLevelKeyboardProc:
PS. Для WH_KEYBOARD_LL dll не нужна, этот хук может быть в exe |
| Автор: knut 5.3.2010, 16:45 |
| xvr, да вы правы у тред который устанавливает хук должен иметь месидж луп. но чтоб в ServiceMain е не создавать этот цыкл я вызываю setHook в winMain e . здесь ведь все нормально с луп ом. но результат тот же. |
| Автор: xvr 6.3.2010, 19:06 | ||
А с чего там будет 'все нормально с message loopом'? winmain вообще блокируется в StartServiceCtrlDispatcher |
| Автор: knut 6.3.2010, 22:46 | ||
| xvr, создал я месидж луп как и вы посоветовали но результат тот же(никакой). вот сервис маин.
что теперь не так? |
| Автор: xvr 7.3.2010, 12:20 | ||
И завершение сервиса должно теперь происходить через посылку WM_QUIT в очередь thread'а, а не через event killServiceEvent (до его ожидания просто не дойдет управление) |
| Автор: knut 7.3.2010, 15:58 | ||||
ну до выгода мне пока надо хук запустить что пока у меня не получается.
все равно KeyboardProc не вызывается |
| Автор: xvr 7.3.2010, 17:12 |
| Тогда действительно возможны проблемы с десктопом. Поставьте сервису флажок 'Разрешить взаимодействовать с Рабочим Столом' при инсталяции. |
| Автор: knut 7.3.2010, 17:28 | ||
| xvr, стоит. я сервис содаю именно с этим флагом.
|