Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.01 c
1-25440
del_programmer
2003-12-23 17:42
2004.01.09
skin


3-25205
jonik_jj
2003-12-11 17:44
2004.01.09
DevExpress- Проблемы с TdxDBLookupEdit


3-25209
www
2003-12-11 14:50
2004.01.09
Date и int


4-25650
Prov
2003-11-06 09:35
2004.01.09
MessageBoxIndirect - don t work


1-25297
Тимохов
2003-12-16 14:20
2004.01.09
Правила вызова AddRef





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский