Вниз
Скачать: CL | DM;

service application (debugging, running :)   Найти похожие ветки 

 
mace   (2003-02-18 12:43) [0]

как?
1. дебагить сервис
2. сделать что б он работал :). То есть когда его запускаешь из Дельфи - он сам закрывается через 30 сек. Если его зарегистрировать
MyService /install
и потом запускать из services.msc, то винда говорит, что ошибки нетути, но и работать оно не будет :)

И кто мне скажет зачем класс TServiceApplication?


 
Mace   (2003-02-19 07:07) [1]

Сам нашёл :)
Просто непонимание специфики сервиса...
Может кому пригодиться:
есть замечательное событие у класса TService: OnExecute
в нём ДОЛЖЕН быть такой цикл:

while not Terminated do begin
// мой код....
// ...........
ServiceThread.ProcessRequests(True);
end;

внутри цикла - вся требуемая логика.
ServiceThread.ProcessRequests(True); - обрабатывает сообщения(как то pause, stop) - если его не будет всё запуститься, но не остановится :)
А дельфи сама наверно паузу ставит 30 сек... что б было видно что работает :)
Касательно TServiceApplication...

Application.Initialize;
Application.CreateForm(TWOL, WOL);
Application.Run;

Вот этот Application есть экземпляр класса TServiceApplication...
А вот в репозитории разницу сами увидите(TService, TServiceApplication)
Вобщем надо внимательнее хелп читать :(
есть там всё(в примере). Правда не объяснено....


 
Alex Konshin ©   (2003-02-19 07:19) [2]

Дебагить сервис рекомендую древним проверенным способом - выодом сообщений с помощью OutputDebugString и просмотром их в DebugView ( http://www.sysinternals.com/ntw2k/freeware/debugview.shtml ), можно и с другой машины. Вот я, например, пускаю сервис на другой машине через MMC удаленно и вижу протокол в реальном времени на своей машине в DebugView. Просто у меня приложение сетевое и нужно видеть взаимодествие клиентов и сервиса.

Для удобства использую такую простую функцию:

procedure Debug( const AFormat : String; Args :Array of const );
begin
try
OutputDebugString(PChar(Format(AFormat,Args)));
except
on E:Exception do
OutputDebugString(PChar(E.ClassName+" on OutputDebugString(PChar(Format("+Quote(AFormat)+",[...])))"));
end;
end;


Еще очень рекомендую посмотреть модуль debug из JCL (JEDI Code Library) http://sourceforge.net/projects/jcl/



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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.013 c
1-87519
Saracin
2003-02-16 22:31
2003.02.27
Как узнать закрылась окно или нет.


1-87535
Checist [root]
2003-02-17 10:02
2003.02.27
Считывание из файла


6-87595
gari
2003-01-10 12:15
2003.02.27
Доброго дня господа.


3-87347
VLL
2003-02-11 11:02
2003.02.27
Data Link


3-87327
IUSUPp
2003-02-10 17:17
2003.02.27
Создать связь базы Assecc с Delphi6




   Наверх