Привет всем. Помогите кто может (а то я уже задолбался).
Есть ServiceNT, внути него COM. При запуске сервиса создается диалог (HIDE) и из него добавляется иконка в Tray.
Если из другой проги конектится к COM, то сервис запускается и в SysTray появляется иконка — все класно.
Но если сервис запустить просто так (из \controlPanel\Service), то ничерта не выводится, Shell_NotifyIcon возвращает 0.
Всем кто ответит заранее благодарен.
Здравствуйте alexzapl, вы писали:
A>Привет всем. Помогите кто может (а то я уже задолбался). A>Есть ServiceNT, внути него COM. При запуске сервиса создается диалог (HIDE) и из него добавляется иконка в Tray. A>Если из другой проги конектится к COM, то сервис запускается и в SysTray появляется иконка — все класно. A>Но если сервис запустить просто так (из \controlPanel\Service), то ничерта не выводится, Shell_NotifyIcon возвращает 0. A>Всем кто ответит заранее благодарен.
сходи на http://www.codeproject.com,я там видел пример сервайса, который при запуске помещает иконку в Tray
Здравствуйте alexzapl, вы писали:
A>Привет всем. Помогите кто может (а то я уже задолбался). A>Есть ServiceNT, внути него COM. При запуске сервиса создается диалог (HIDE) и из него добавляется иконка в Tray. A>Если из другой проги конектится к COM, то сервис запускается и в SysTray появляется иконка — все класно. A>Но если сервис запустить просто так (из \controlPanel\Service), то ничерта не выводится, Shell_NotifyIcon возвращает 0. A>Всем кто ответит заранее благодарен.
Спасибо всем кто ответил, но я уже сам разобрался в чем причина.
Действительно, как писал OlegO : "Allow service to interact with desktop"
сервис надо сделать интерактивным, потому что по умолчанию этого нет, т.е. сервис и десктоп не видят сообщения друг друга.
Если кому интересно, то могу сказать как это исправить.
Если вы создавали сервис через визард, то необходимо сделать следующее:
в функции
CServiceModule::Install()
{
...
SC_HANDLE hService = ::CreateService(...)
...
}
функция CreateService(...) создает севис с флагом SERVICE_WIN32_OWN_PROCESS, надо заменить на
SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS
Здравствуйте alexzapl, Вы писали:
A>функция CreateService(...) создает севис с флагом SERVICE_WIN32_OWN_PROCESS, надо заменить на A>SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS
A>и тогда все будет ОК.
Да. Если не считать, что сразу открывается неплохая брешь в защите и устойчивости сервиса.
Правильней будет сделать так как это сделано в MS SQL Server. Сделать отдельную программу которая будет загружаться в сартап меную и будет показывать состояние сервиса, а также позволит выполнять другие функции.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте VladD2, Вы писали:
VD>Правильней будет сделать так как это сделано в MS SQL Server. Сделать отдельную программу которая будет загружаться в сартап меную и будет показывать состояние сервиса, а также позволит выполнять другие функции.
А ни у кого нет случайно примера с чем-нибудь подобным уже написанным?