Сервис не останавливается
От: mselez  
Дата: 22.04.03 17:12
Оценка:
Добрый день!
Я был вынужден модифицировать программу, работающую как сервис на NT и она перестала нормально останавливаться, когда делаешь это из окна Services вручную. Обнаружил, что команда SetServiceStatus при инициализации (SERVICE_RUNNING) в ServiceMain проходит успешно, а вот когда посылается статус SERVICE_STOPPED, эта команда завершается с GetLastError() = 6 — ERROR_INVALID_HANDLE. Вывел в лог значение хэндла как целое число — после инициализации и в момент останова оно одинаковое. Хэндл, как во всех примерах, определен как глобальная переменная типа SERVICE_STATUS_HANDLE и после инициализации программа к нему не должна обращаться. Я добавил ExitProcess(1) после команды SetServiceStatus со статусом SERVICE_STOPPED, и сервис стал останавливаться с сообщением об ошибке (что-то вроде "..pipe riched end.."). По крайней мере, теперь не надо перезагружать компьютер, когда ставлю новую версию, но удовлетворения нет. Может, кто-нибудь подскажет, в чем дело? Спасибо.
Re: Сервис не останавливается
От: Clickmaker Россия http://relaxander.webest.net/
Дата: 23.04.03 10:03
Оценка:
Здравствуйте, mselez, Вы писали:

M>Добрый день!

M>Я был вынужден модифицировать программу, работающую как сервис на NT и она перестала нормально останавливаться, когда делаешь это из окна Services вручную. Обнаружил, что команда SetServiceStatus при инициализации (SERVICE_RUNNING) в ServiceMain проходит успешно, а вот когда посылается статус SERVICE_STOPPED, эта команда завершается с GetLastError() = 6 — ERROR_INVALID_HANDLE.


ControlService(hService, SERVICE_CONTROL_STOP, &ServiceStatus);
Re: Сервис не останавливается
От: SergH Россия  
Дата: 23.04.03 10:43
Оценка:
Здравствуйте, mselez, Вы писали:

M>Обнаружил, что команда SetServiceStatus при инициализации (SERVICE_RUNNING) в ServiceMain проходит успешно, а вот когда посылается статус SERVICE_STOPPED, эта команда завершается с GetLastError() = 6 — ERROR_INVALID_HANDLE. Вывел в лог значение хэндла как целое число — после инициализации и в момент останова оно одинаковое.


Очень странно. Ты его случайно не закрываешь?
Делай что должно, и будь что будет
Re[2]: Сервис не останавливается
От: mselez  
Дата: 23.04.03 14:13
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Здравствуйте, mselez, Вы писали:


M>Обнаружил, что команда SetServiceStatus при инициализации (SERVICE_RUNNING) в ServiceMain проходит успешно, а вот когда посылается статус SERVICE_STOPPED, эта команда завершается с GetLastError() = 6 — ERROR_INVALID_HANDLE. Вывел в лог значение хэндла как целое число — после инициализации и в момент останова оно одинаковое.


SH>Очень странно. Ты его случайно не закрываешь?


Нет, его ведь не надо закрывать. Я обращаюсь к хэндлу только при инициализации и при останове.
Re[3]: Сервис не останавливается
От: SergH Россия  
Дата: 23.04.03 14:17
Оценка:
Здравствуйте, mselez, Вы писали:

M>Нет, его ведь не надо закрывать. Я обращаюсь к хэндлу только при инициализации и при останове.


Да я в курсе, что не надо... Но ничего умнее в голову не пришло. И не приходит. Единственное, что могу сказать — так быть не должно.
Делай что должно, и будь что будет
Re[2]: Сервис не останавливается
От: mselez  
Дата: 23.04.03 14:18
Оценка:
Здравствуйте, Clickmaker, Вы писали:

C>Здравствуйте, mselez, Вы писали:


M>Добрый день!

M>Я был вынужден модифицировать программу, работающую как сервис на NT и она перестала нормально останавливаться, когда делаешь это из окна Services вручную. Обнаружил, что команда SetServiceStatus при инициализации (SERVICE_RUNNING) в ServiceMain проходит успешно, а вот когда посылается статус SERVICE_STOPPED, эта команда завершается с GetLastError() = 6 — ERROR_INVALID_HANDLE.


C>ControlService(hService, SERVICE_CONTROL_STOP, &ServiceStatus);

Попробовал ControlService, тот же код ошибки в ответ.
Re[4]: Сервис не останавливается
От: mselez  
Дата: 23.04.03 15:04
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Здравствуйте, mselez, Вы писали:


M>Нет, его ведь не надо закрывать. Я обращаюсь к хэндлу только при инициализации и при останове.


SH>Да я в курсе, что не надо... Но ничего умнее в голову не пришло. И не приходит. Единственное, что могу сказать — так быть не должно.

Ну, и на это спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.