Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.09;
Скачать: CL | DM;

Вниз

TServiceApplication и формы   Найти похожие ветки 

 
evgnib   (2003-12-23 12:04) [0]

сделал TServiceApplication.
Короче, для доступа к сервису есть иконка в трэе. Например хочу посмотреть информацию в frmWork (там listbox висит) и выбираю пункт для этого в меню (popup) для данного пункта вызов такой:

procedure TDMService.actFormExecute(Sender: TObject);
begin
frmWork.ShowModal;
end;

Беда вот в чем. Окно показывается, но при закрытии окна (крестик)
оно сразу не закрывается(!), а вот, если пошевелить, например, мышой за заголовок этого окна, то оно исчезает. Такое ощущение, что не обрабатываются сообщения сразу. Но есть невероятный факт, написал дома такой же сервис, но под WinXP, и он работает как положено.

в OnExecute:
~~~~~~~~~~~~~
ServiceTray.Enabled := True;
try
InitWorkForm; // frmWork := TfrmWork.Create(nil)
while not Terminated do
ServiceThread.ProcessRequests(False);
finally
DestroyWorkForm; // frmWork.Free;
end;
ps. Где собака порылась ?


 
Digitman ©   (2003-12-23 12:23) [1]


> Где собака порылась ?


в теле OnExecute() MainThreadId <> GetCurrentThreadId

здесь и "порылась"


 
evgnib   (2003-12-23 12:50) [2]

а как исправить ситуацию ?


 
Digitman ©   (2003-12-23 12:58) [3]

создавать форму и обращаться к форме ТОЛЬКО в контексте осн.код.потока сервисного приложения, т.е. обеспечить на момент создания/обращения условие MainThreadId = GetCurrentThreadId

в теле обработчиков OnStart(),OnStop(), OnExecute() это условие быть выполненным НЕ может

создание/уничтожение формы проще и безопасней всего осуществить в обработчиках событий TService.OnCreate()/OnDestroy()

там же - создание TrayIcon, его меню с соотв.обработчиками и пр.


 
evgnib   (2003-12-23 13:03) [4]

спасибо, сейчас проверил - заработало ;)


 
y-soft ©   (2003-12-23 13:06) [5]

Вообще, нехорошо интерактивно работать непосредственно с сервисом. Правильнее использовать для этого специальное приложение (отдельный EXE или апплет панели управления), работающее под учетной записью пользователя, а для связи - именованные каналы, сокеты, посылку пользовательских кодов через SCManager etc...

Многократно надежнее


 
Digitman ©   (2003-12-23 13:12) [6]


> y-soft


> Вообще, нехорошо


не думаю так.
что криминального в том, что в трее висит иконка быстрого виз.доступа к конфиг.параметрам сервиса ?


 
y-soft ©   (2003-12-23 13:21) [7]

>Digitman © (23.12.03 13:12) [6]

Криминального ничего. Но увеличивается возможность вышибить сервис.
In my and Microsoft Corp. humble opinion :)

IMHO даже вывод MessageBox с флагом MB_SERVICE_NOTIFICATION из сервиса надо использовать лишь в самом крайнем случае...

В прочем - дело вкуса...


 
Digitman ©   (2003-12-23 13:32) [8]


> y-soft


> Но увеличивается возможность вышибить сервис


ну знаешь ли !)

с "кривыми" мозгами/руками любоесколь угодно надежное начинание и/или техн.решение можно загнать в разряд "глюков"


 
y-soft ©   (2003-12-23 13:47) [9]

>Digitman © (23.12.03 13:32) [8]

А ты предусматриваешь ситуацию, когда панель задач перестает реагировать на посылку сообщений (из-за неправильной работы какого-нибудь третьего приложения)? Я с таким неоднократно сталкивался. В этом случае с большой вероятностью получишь в сервисе исключение при попытке послать NIF_ICON или NIF_TIP, не помогает даже заключение вызова в try...except :(

В случае же со специальным приложением сервис не пострадает.

Опять-таки чаще всего сервис конфигурируется при запуске, считывая настроечные параметры из реестра, и конфигурационные утилиты обычно просто меняют установки в реестре, а потом через SCManager перезапускают сервис...

В прочем еще раз повторюсь: это дело вкуса разработчика...

P.S. Ничего личного. С уважением, ...


 
Digitman ©   (2003-12-23 14:19) [10]


> y-soft


видишь ли, насколько мне стало понятно - в вопросе не идет речи о "командовании" сервисом посредством SCManager"а

просто есть некая форма, на которой , скажем, визуально отображается тек.инф-ция о прикладном состоянии сервиса, не более того



Страницы: 1 вся ветка

Текущий архив: 2004.01.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
3-25181
visnuk
2003-12-08 12:43
2004.01.09
Кто работал с DBComboBox при работе с БД


1-25395
WOLT_19
2003-12-24 18:41
2004.01.09
Запуск проги.


6-25494
X-Disa
2003-11-10 13:44
2004.01.09
Потоки


14-25557
Михааааааааааааа
2003-12-18 15:29
2004.01.09
Важная инфа


14-25530
Floppy
2003-12-19 14:32
2004.01.09
Delphi 5.0 на Win2k