Форум: "Основная";
Текущий архив: 2003.02.27;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "Основная";
Текущий архив: 2003.02.27;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c