Форум программистов CODEBY.NET Хостинг в Беларуси — Active Technologies

Разработка бизнес сайтов

Нужны клиенты? Тогда сюда быстрее...
X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )




> Службы Windows или как написать Service своими руками, ПАМАГИТЕ!
lazynov
Вставить ник
сообщение 28:06:2006, 20:26
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 43
Регистрация: 14:05:2006
Пользователь №: 4 201



Репутация: - 1 +


Кто нибудь знает как написать в Delphi службу своими собственными руками?
Или хотя бы подскажите, где про это можно найти и суть создания/функционирования службы.
ПАЖАЛСТА! biggrin.gif
Подняться вверх 
 
Сообщение #1
 
Новая тема 
Ответов (1 - 12)
Barmutik
Вставить ник
сообщение 29:06:2006, 07:59
Цитата Ответить 


Божественный
*****

Группа: Модеры
Сообщений: 2 450
Регистрация: 27:05:2004
Из: Минск
Пользователь №: 561
Специализация: Delphi, RDBMS, C#



Репутация: - 8 +


Просьба почитать хелп по поводу TServiceApplication

В Дельфи это делается просто создаением нового проекта Service Application
Подняться вверх 
 
Сообщение #2
lazynov
Вставить ник
сообщение 30:06:2006, 19:45
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 43
Регистрация: 14:05:2006
Пользователь №: 4 201



Репутация: - 1 +


Цитата(Barmutik @ 29:06:2006, 09:59 ) *
Просьба почитать хелп по поводу TServiceApplication

В Дельфи это делается просто создаением нового проекта Service Application

Спасибо!
Я почитал, но дело в том, что сервис, даже без каких либо команд не запускается!
Мои шаги:
1) file|New|Other|Service Application
2) компилируем пустой сервис
3) регистрируем сервис в системе
4) пытаемся запустить из менеджера сервисов и... облом
Ошибка! Сервис не отвечает!

И как мне теперь быть??? unsure.gif unsure.gif unsure.gif
Подняться вверх 
 
Сообщение #3
Coldfate
Вставить ник
сообщение 2:07:2006, 06:33
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 47
Регистрация: 8:06:2006
Из: Амбер
Пользователь №: 4 695
Специализация: Программист



Репутация: - 1 +


Есть такое событие у сервиса - OnExecute. Оно происходит всякий раз, когда сервис запускается. Так вот, в этом OnExecute пишете нужные Вам команды, а в конце пишете следующее:

While not Terminated do
ServiceThread.ProcessRequests(True);

А сервис не отвечает, потому что отсутствует OnExecute и сервис сразу же закрывается.

И всё будет OK! cool.gif
Подняться вверх 
 
Сообщение #4
lazynov
Вставить ник
сообщение 3:07:2006, 07:11
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 43
Регистрация: 14:05:2006
Пользователь №: 4 201



Репутация: - 1 +


Цитата(Coldfate @ 2:07:2006, 08:33 ) *
Так вот, в этом OnExecute пишете нужные Вам команды, а в конце пишете следующее:

While not Terminated do
ServiceThread.ProcessRequests(True);

А сервис не отвечает, потому что отсутствует OnExecute и сервис сразу же закрывается.

И всё будет OK! cool.gif

Ну зделал я так и все равно! Че-то не получается! Вот исходники - посмотри если не сложно...
В архиве есть файл РегСервис.exe. Копируешь на D:\ сервис с именем FreeControl.exe и жмешь кнопку register. В менеджере процессов появится Free_Control.
Прикрепленные файлы
Прикрепленный файл  FreeControlServer.rar ( 412.72 килобайт ) Кол-во скачиваний: 237
 
Подняться вверх 
 
Сообщение #5
Coldfate
Вставить ник
сообщение 4:07:2006, 02:23
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 47
Регистрация: 8:06:2006
Из: Амбер
Пользователь №: 4 695
Специализация: Программист



Репутация: - 1 +


У Вас там есть несколько багов. Во-первых, ShowMessage не будет показываться никогда во время загрузки сервиса, лучше для этой цели использовать вывод в файл. А во-вторых, в моём коде написано:
Код
While not Terminated do
ServiceThread.ProcessRequests(True);

А у Вас FALSE!!!!!!

И лучше всего регистрировать сервис, запуская его с параметром /install А так вроде всё нормально.

З.Ы. И ещё: цикл While not Terminated do... нужен, чтобы сервис не заткнулся - процедура выполняется только один раз! В качестве примера можете взять это:

Код
var f: TextFile;
...

AssignFile(f, 'c:\haha.txt');
While not terminated do
begin
    Append(f);
    WriteLn(f, 'Привет!');
    CloseFile(f);
    ServiceThread.ProcessRequests(False); //А вот тут уже нужно false, чтобы сервис не ждал сообщения.
  end;


Это позволит Вам проверить работоспособность сервиса...
Подняться вверх 
 
Сообщение #6
Berkut
Вставить ник
сообщение 21:01:2007, 01:49
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 6
Регистрация: 21:01:2007
Пользователь №: 8 887



Репутация: - 0 +


А ты сервис регистрировал-то?

Ты его вообще запускаешь как сервис, или просто по екзешнику кликаешь?
Подняться вверх 
 
Сообщение #7
decay
Вставить ник
сообщение 15:04:2008, 10:00
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 3
Регистрация: 15:04:2008
Пользователь №: 16 644



Репутация: - 0 +


А как его зарегистрировать через командную строку в xp?
Или как это можно сделать программно, какими api лучше воспользоваться?
Подняться вверх 
 
Сообщение #8
lazynov
Вставить ник
сообщение 15:04:2008, 12:39
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 43
Регистрация: 14:05:2006
Пользователь №: 4 201



Репутация: - 1 +


Цитата(decay @ 15:04:2008, 12:00 ) *
А как его зарегистрировать через командную строку в xp?
Или как это можно сделать программно, какими api лучше воспользоваться?

запусти с параметром /install - для рег
/uninstall - для дерег
Подняться вверх 
 
Сообщение #9
decay
Вставить ник
сообщение 15:04:2008, 14:04
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 3
Регистрация: 15:04:2008
Пользователь №: 16 644



Репутация: - 0 +


Спасибо, разобрался.
Ещё вопрос: сделал сервис по этому примеру: http://www.realcoding.net/article/view/4164
Если запустить его как обычное приложение, в трее видно иконку, можно потыкать в неё, показать/убрать форму настроек и т.д. Если же запустить этот пример как сервис, иконки в трее нет. Почему она не появляется?
Подняться вверх 
 
Сообщение #10
Coldfate
Вставить ник
сообщение 16:04:2008, 06:04
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 47
Регистрация: 8:06:2006
Из: Амбер
Пользователь №: 4 695
Специализация: Программист



Репутация: - 1 +


Возьмите компонент TCoolTrayIcon, в нете можно скачать. Он у меня никогда не глючил, полезная штука. Ставите его на форму, задаёте иконку (свойство Icon), затем IconEnabed = True, чтобы включить иконку.
Подняться вверх 
 
Сообщение #11
Silver Wind
Вставить ник
сообщение 16:04:2008, 06:40
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 99
Регистрация: 30:07:2007
Из: Витебск
Пользователь №: 12 080
Специализация: программист



Репутация: - 6 +


Цитата(decay @ 15:04:2008 - 17:04) *
Если запустить его как обычное приложение, в трее видно иконку, можно потыкать в неё, показать/убрать форму настроек и т.д. Если же запустить этот пример как сервис, иконки в трее нет. Почему она не появляется?


Проверь (services.msc) в свойствах твоего сервиса на закладке "Вход в систему" включено ли "Разрешить взаимодействие с рабочим столом".
Подняться вверх 
 
Сообщение #12
decay
Вставить ник
сообщение 16:04:2008, 17:21
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 3
Регистрация: 15:04:2008
Пользователь №: 16 644



Репутация: - 0 +


Silver Wind
Спасибо, как раз то, что нужно!
Подняться вверх 
 
Сообщение #13


Быстрый ответ  Ответить  Новая тема 

> Быстрый ответ
Полужирный
Курсив
Подчеркнутый
Вставить изображение
Смайлики
Цитата
Код
 
 Отправлять уведомления об ответах на e-mail |  Включить смайлики |  Добавить подпись
   

 

RSS Текстовая версия Сейчас: 17:05:2008 - 06:04
с нами можно связаться по:
телефону: +375-(29)-632-60-67
e-mail:info@codeby.net