помоготи с SysTray
От: alexzapl  
Дата: 27.09.01 11:14
Оценка:
Привет всем. Помогите кто может (а то я уже задолбался).
Есть ServiceNT, внути него COM. При запуске сервиса создается диалог (HIDE) и из него добавляется иконка в Tray.
Если из другой проги конектится к COM, то сервис запускается и в SysTray появляется иконка — все класно.
Но если сервис запустить просто так (из \controlPanel\Service), то ничерта не выводится, Shell_NotifyIcon возвращает 0.
Всем кто ответит заранее благодарен.
Re: помоготи с SysTray
От: pg Россия  
Дата: 28.09.01 07:28
Оценка:
Здравствуйте alexzapl, вы писали:

A>Привет всем. Помогите кто может (а то я уже задолбался).

A>Есть ServiceNT, внути него COM. При запуске сервиса создается диалог (HIDE) и из него добавляется иконка в Tray.
A>Если из другой проги конектится к COM, то сервис запускается и в SysTray появляется иконка — все класно.
A>Но если сервис запустить просто так (из \controlPanel\Service), то ничерта не выводится, Shell_NotifyIcon возвращает 0.
A>Всем кто ответит заранее благодарен.

сходи на http://www.codeproject.com,я там видел пример сервайса, который при запуске помещает иконку в Tray
Глеб
Re: помоготи с SysTray
От: OlegO Россия http://www.mediachase.ru
Дата: 28.09.01 09:53
Оценка:
Попробуй в свойствах сервиса поставить галочку в:
"Allow service to interact with desktop".

А то иначе сервис создается под системным аккаунтом, а у него никакого
десктопа и в помене нет.
С уважением, OlegO.
Re: помоготи с SysTray
От: alexzapl  
Дата: 01.10.01 06:08
Оценка:
Здравствуйте 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

и тогда все будет ОК.
Re[2]: помоготи с SysTray
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.11.01 22:00
Оценка:
Здравствуйте alexzapl, Вы писали:

A>функция CreateService(...) создает севис с флагом SERVICE_WIN32_OWN_PROCESS, надо заменить на

A>SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS

A>и тогда все будет ОК.


Да. Если не считать, что сразу открывается неплохая брешь в защите и устойчивости сервиса.

Правильней будет сделать так как это сделано в MS SQL Server. Сделать отдельную программу которая будет загружаться в сартап меную и будет показывать состояние сервиса, а также позволит выполнять другие функции.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: помоготи с SysTray
От: Tumypka  
Дата: 26.11.01 02:40
Оценка:
Здравствуйте VladD2, Вы писали:

VD>Правильней будет сделать так как это сделано в MS SQL Server. Сделать отдельную программу которая будет загружаться в сартап меную и будет показывать состояние сервиса, а также позволит выполнять другие функции.


А ни у кого нет случайно примера с чем-нибудь подобным уже написанным?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.