![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
подскажите, где можно взять исходник шаблона сервиса. Пустышки. Чтобы например сервис, который просто пикает если его стартанешь, и прекращает и завершается когда его остановишь. Желательно на Visual Studio 8. А то по инету вроде так много исходников, но все они или под шестую студию, или под седьмую.
И у всех одна и та же ошибка: 1063 — Процесс службы не может установить связь с контроллером службы |
|||
|
||||
| Tectoder |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 202 Регистрация: 13.3.2007 Репутация: 7 Всего: 8 |
||||
|
||||
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
привет, Tectoder
нет, сервис устанавливается по всем правилам - например, через командную строку. Запускаетмя вручную в "Службах". В качестве выполняемой задачи (для примера) поставлен Beep. Есть булевая переменная, которая при старте службы принимает истину, при остановке - ложь. И когда переменная принимает истину, запускается бип (в ServiceMain) При запуске уже самой службы (не сервиса) начинает беспрерывно пищать, на полпути зависает, и выдается сообщение наподобие, что служба остановлена, тк не ответила вовремя. И потом эту службу приходится выдирать из диспетчера. Или, например, как можно при помощи сервиса реализовать вот такое:
PS. если что, могу выложить исходник |
|||
|
||||
| Tectoder |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 202 Регистрация: 13.3.2007 Репутация: 7 Всего: 8 |
MessageBox(0,"AAA","BBB",MB_SERVICENOTIFICATION);
Для вывода самое простое. Пойдет? |
|||
|
||||
| Damarus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: 4 Всего: 29 |
||||
|
||||
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
||||
|
||||
| Pulse69 |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 28.4.2006 Где: Хабаровск Репутация: 8 Всего: 10 |
12usver12, привет.
Посмотрел код и вот какие замечания. В функции ServiceMain Вы переводите службу в состояние "запуск".
Сразу после этого Вы запускаете рабочий цикл сервиса, который действует пока не было получено сообщения SERVICE_CONTROL_STOP, хотя перед основным циклом сервис нужно перевести в состояние SERVICE_RUNNING.
Иначе, диспетчер сервисов посчитает, что служба зависла при запуске (у Вас WaitHint на 4 секунды, а повторных вызовов с увеличением CheckPoint не было). Ещё один момент. После получения сигнала SERVICE_CONTROL_STOP Вы сразу же переводите службу в состояние "остановлена", не оставляя функции ServiceMain ни малейшего шанса выполниться до конца. Я бы рекомендовал не останавливать службу после получения сигнала SERVICE_CONTROL_STOP, а устанавливать флаг IsRunning (вообще, каким-нибудь методом прервать выполнение, если это возможно). После этого, основной цикл завершится, и можно будет провести деинициализацию всех выделенных ресурсов. Иначе, при остановке службы могут возникнуть ошибки (естественно, когда она уже обзаведётся солидным функционалом).
И последнее. В коде я увидел попытки, хотя и закомментированные, работы с консолью из службы. По-хорошему, в сервисе вообще не должно быть пользовательского ввода-вывода. А если нет залогиненых пользователей, с кем тогда сервис будет общаться? PS: Указанная ошибка 1063 не появляется, если службу запускать по всем правилам, а не двойным щелчком на экзешнике. Это сообщение отредактировал(а) Pulse69 - 9.9.2007, 03:13 --------------------
Ctrl+Alt+Reset |
||||||
|
|||||||
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
привет, Pulse69
спасибо за такие ценные замечания! все отлично пошло, пишется при запуске в файл. а для работы с той же консолью как реализовать? создать еще одно приложение, которое будет требовать от пользователся ввода данных, и в сервисе например при помощи того же CreateProcess(...) запускать консольное приложение? В котором есть пользовательский ввод-вывод? |
|||
|
||||
| Pulse69 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 28.4.2006 Где: Хабаровск Репутация: 8 Всего: 10 |
Да, если нужно взаимодействие, пишется отдельное приложение, которое общается со службой любым способом, который подойдёт: контрольные сообщения сервиса, сокеты, именованные каналы, и т.д.
Его можно или занести в автозагрузку для нужных пользователей, или предложить им запускать эту программку самостоятельно. --------------------
Ctrl+Alt+Reset |
|||
|
||||
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
Большое спасибо за помощь, все чудесно пошло, сервер запускается ввиде службы, и читает номер порта из файла
Удачи |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |