Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-87520
tred
2003-02-16 15:12
2003.02.27
как удалить последнюю строку в string?


14-87650
down
2003-02-10 16:30
2003.02.27
freevcs


1-87498
msoftware
2003-02-16 06:53
2003.02.27
Чтение и запись иконок в файл


1-87418
Tornado
2003-02-18 07:49
2003.02.27
Динамическое выделение памяти


3-87336
Keeper
2003-02-05 15:43
2003.02.27
DOS-кодировка





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский