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

Вниз

Написание сервисов под win…   Найти похожие ветки 

 
Slonic75   (2003-02-07 15:25) [0]

Написание сервисов под win…

Вопрос к специалистам – как писать сервисы под win? Может кто порекомендует что-то типа руководства?

У меня есть консольное приложение, которое нормально работает, когда запускаешь его в ручную. Приложение в начале своей работы обращается к файлу .ini, из которого считывает настройки. В ходе свое работы приложение очень активно работает с БД через ADO (TADOConnection, TADOCommand и т.д.). Кроме этого там запускаются доп. потоки (созданные через TThread) и использует средства синхронизации между потоками и процессами (события, критические секции и mutex).

Хочу сделать, что бы данное приложение работало как сервис (консоль должна быть видна, т.к. через нее вводятся команды). Самое простое что я сделал – создал новое приложение типа Service Application и в нем запускал мое исходное приложение через CreateProcess, а потом ожидаю его завершения. Но при запуске основного приложения – оно вылетает в момент обращения к AssignFile.

Вроде как кто-то на форуме упоминал, что для работы с файлами в сервисах есть свои особенности, но подробностей нет. Подозреваю, что сложности возникнут и с ADO и с объектами синхронизации… А может и нет…

Может кто поможет?


 
Ihor Osov'yak   (2003-02-07 17:00) [1]

File/New/Service...

Но посоветовал-бы, перед тем как что нибуть ваять, изучить основательно, что в каком потоке выполняется.. Методом записи ID потока в какой-то отладочный лог.

Никаких особенностей при работе с файлами и тп нет. Если понимать, что в каком потоке выполняется. Также может быть проблемой, что нет главной формы с прывычним хендленром, то есть SendMessage слать некому ... Ну разве что создать свое окно...
PostMessage можно..
Ну также не заблудиться между Application от модуля форм и одноименной тварью от модуля сервисов.. То есть изучить внимательно исходники...

Зы - для себя я сделал вывод, что следующий сервис уже наверно буду писать на чистом апи, ибо тот делфийский визард по большой части не так помагает, как запутывает... Но все же первый сервис наверно нужно делать, используя стандартные средства...

Руководста? дык msdn.. А заточенное под делфи ии на русском - не видел...


 
Ihor Osov'yak   (2003-02-07 17:10) [2]

Зы по поводу SendMesssage...

Сообщения можно ловить в Tservice.AppMessage, но туда дойдут только посланные через PostMessage на forms.Application...



 
Slonic75   (2003-02-07 18:48) [3]

Доп. потоки создаются в самом конце. Там делаются обработка данных. В начале есть толко основной поток - в нем происходит инициализация...
По сути сервис просто старутет новый процесс через CreateProcess. Фактически получается что мое исходное приложение просто запускается под системным аккаунтом. Почему в таком случае оно падает при обращении к AssignFile?


 
Ihor Osov'yak   (2003-02-07 23:04) [4]

>Доп. потоки создаются в самом конце

Неа. Сервис уже как минимум, работает в ином потоке, чем тот поток, в котором происходило создание инстанции Application :-)..


> Почему в таком случае оно падает при обращении к AssignFile?

А откуда я знаю, что тав у вас понаписано.. Отладчиком пройдитесь..

Зы, тот сервис, что на днях - и многопоточная с адо работа, и с сокетами, причем для каждого клиентского подключения свой поток... И запись всего, что только можно на стадии отладки в текстовый файл (естественно, с разных потоков в один файл, естественно, с юзанием обьектов синхронизации). Я это к тому, что никако особого поведения чего-либо в сервисе я не заменил.. А внимателен я очень . Уж поверьте. Только одно исключение - опячатки. Но это к сервисам как-бы отношения не имеет.





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

Форум: "Основная";
Текущий архив: 2003.02.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.012 c
14-53244
Anatoly Podgoretsky
2003-02-01 10:26
2003.02.17
Именинники 1 февраля


1-53061
jiura
2003-02-06 17:11
2003.02.17
Скрытие MDiChild


3-52719
Sherbacov
2003-01-29 16:22
2003.02.17
Сетевой paradox


14-53201
FLIZ
2003-01-31 14:02
2003.02.17
что надо набрать в


7-53314
Zmey
2002-12-14 17:31
2003.02.17
A call on OS function failed





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