Службы Windows или как написать Service своими руками

Тема в разделе "Delphi - Система", создана пользователем lazynov, 29 июн 2006.

Статус темы:
Закрыта.
  1. lazynov

    lazynov Гость

    Кто нибудь знает как написать в Delphi службу своими собственными руками?
    Или хотя бы подскажите, где про это можно найти и суть создания/функционирования службы.
    ПАЖАЛСТА! :angry:
     
  2. Barmutik

    Barmutik Гость

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

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

    lazynov Гость

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

    И как мне теперь быть??? :D :) :unsure:
     
  4. Coldfate

    Coldfate Гость

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

    While not Terminated do
    ServiceThread.ProcessRequests(True);

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

    И всё будет OK! :)
     
  5. lazynov

    lazynov Гость

    Ну зделал я так и все равно! Че-то не получается! Вот исходники - посмотри если не сложно...
    В архиве есть файл РегСервис.exe. Копируешь на D:\ сервис с именем FreeControl.exe и жмешь кнопку register. В менеджере процессов появится Free_Control.
     

    Вложения:

  6. Coldfate

    Coldfate Гость

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

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

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

    Код (Text):
    var f: TextFile;
    ...

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

    Berkut Гость

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

    Ты его вообще запускаешь как сервис, или просто по екзешнику кликаешь?
     
  8. decay

    decay Member

    Регистрация:
    15 апр 2008
    Сообщения:
    6
    Симпатии:
    0
    А как его зарегистрировать через командную строку в xp?
    Или как это можно сделать программно, какими api лучше воспользоваться?
     
  9. lazynov

    lazynov Гость

    запусти с параметром /install - для рег
    /uninstall - для дерег
     
  10. decay

    decay Member

    Регистрация:
    15 апр 2008
    Сообщения:
    6
    Симпатии:
    0
    Спасибо, разобрался.
    Ещё вопрос: сделал сервис по этому примеру: http://www.realcoding.net/article/view/4164
    Если запустить его как обычное приложение, в трее видно иконку, можно потыкать в неё, показать/убрать форму настроек и т.д. Если же запустить этот пример как сервис, иконки в трее нет. Почему она не появляется?
     
  11. Coldfate

    Coldfate Гость

    Возьмите компонент TCoolTrayIcon, в нете можно скачать. Он у меня никогда не глючил, полезная штука. Ставите его на форму, задаёте иконку (свойство Icon), затем IconEnabed = True, чтобы включить иконку.
     
  12. Silver Wind

    Silver Wind Гость

    Проверь (services.msc) в свойствах твоего сервиса на закладке "Вход в систему" включено ли "Разрешить взаимодействие с рабочим столом".
     
  13. decay

    decay Member

    Регистрация:
    15 апр 2008
    Сообщения:
    6
    Симпатии:
    0
    Silver Wind
    Спасибо, как раз то, что нужно!
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей