Добрый день!
Я был вынужден модифицировать программу, работающую как сервис на NT и она перестала нормально останавливаться, когда делаешь это из окна Services вручную. Обнаружил, что команда SetServiceStatus при инициализации (SERVICE_RUNNING) в ServiceMain проходит успешно, а вот когда посылается статус SERVICE_STOPPED, эта команда завершается с GetLastError() = 6 — ERROR_INVALID_HANDLE. Вывел в лог значение хэндла как целое число — после инициализации и в момент останова оно одинаковое. Хэндл, как во всех примерах, определен как глобальная переменная типа SERVICE_STATUS_HANDLE и после инициализации программа к нему не должна обращаться. Я добавил ExitProcess(1) после команды SetServiceStatus со статусом SERVICE_STOPPED, и сервис стал останавливаться с сообщением об ошибке (что-то вроде "..pipe riched end.."). По крайней мере, теперь не надо перезагружать компьютер, когда ставлю новую версию, но удовлетворения нет. Может, кто-нибудь подскажет, в чем дело? Спасибо.