Сервисы обычно не получают оконные сообщения. Они не обязательно имеют оконные ручки вообще. Даже если они это сделают, они запускаются на отдельном рабочем столе. Программы не могут отправлять сообщения с одного рабочего стола на другой, поэтому служба может получать сообщения только от другой службы или от программы, запущенной службой.
До выхода Windows Vista вы могли настроить службу для взаимодействия с рабочим столом. Это заставляет службу работать на том же рабочем столе, что и вошедший в систему пользователь, поэтому программа, работающая под этим пользователем, может отправлять сообщения в окна вашей службы. Windows Vista изолирует сервисы; они больше не могут взаимодействовать с рабочим столом любого пользователя.
Есть много других способов общения с сервисами. Они включают именованные каналы, почтовые слоты, отображенные в память файлы, семафоры, события и сокеты.
Например, с помощью сокета ваша служба может прослушивать открытый порт, а программы, которым необходимо с ней общаться, могут подключаться к этому порту. Это может открыть дверь для удаленного администрирования, но вы также можете ограничить службу прослушиванием только локальных соединений.
Все вышесказанное пытается сказать вам, что вы используете неправильный подход. Но есть и проблема проблемы. Ваша программа ведет себя так, как в отладчике, так и вне ее. Как вы отлаживаете службу в первую очередь, если она не установлена? На какой учетной записи работает ваша служба? Твой отладчик? Какие методы отладки вы использовали, которые не включают отладчик (например, writeln
в файл журнала для отслеживания действий вашей программы)?