powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Установка и запуск самописной службы
5 сообщений из 5, страница 1 из 1
Установка и запуск самописной службы
    #39954340
Фотография Mandarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Мне нужно запустить службу с параметрами.
Я создал простую службу, вот код.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, SvcMgr, uCheckState;

type
  TService2 = class(TService)
    procedure ServiceStart(Sender: TService; var Started: Boolean);
    procedure ServiceStop(Sender: TService; var Stopped: Boolean);
    procedure ServiceExecute(Sender: TService);
    procedure ServiceContinue(Sender: TService; var Continued: Boolean);
    procedure ServicePause(Sender: TService; var Paused: Boolean);
  private
    { Private declarations }
  public
    function GetServiceController: TServiceController; override;
    { Public declarations }
  end;

var
  Service2: TService2;

implementation

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  Service2.Controller(CtrlCode);
end;

function TService2.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;

procedure TService2.ServiceContinue(Sender: TService; var Continued: Boolean);
begin
  Continued := True;
end;

procedure TService2.ServiceExecute(Sender: TService);
begin
  while not Terminated do
  begin
    ServiceThread.ProcessRequests(true);
    Sleep(1);
  end;
end;

procedure TService2.ServicePause(Sender: TService; var Paused: Boolean);
begin
  Paused := true;
end;

procedure TService2.ServiceStart(Sender: TService; var Started: Boolean);
begin
  Started := True;
end;

procedure TService2.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
  Stopped := True;
end;

end.



Устанавливаю так MyService.exe /install
Получаю сообщение что служба установилась, вижу свою службу в списке служб, служба запускается. Как передать параметры службе, в этом случае, не знаю.
Пробую установить службу так sc.exe create MyService binPath= "c:\MyService.exe" в Этом случае можно передать параметры.
Получаю сообщение что служба установилась, вижу свою службу в списке служб, но служба не запускается. При запуске службы висит окно с процессом запуска, а потом выкидывает сообщение что служба не ответила на запрос своевременно.
Подскажите пожалуйста, почему не запускается служба при установке через sc.exe? Пробовал на WindowsXP и на Windows 10.
...
Рейтинг: 0 / 0
Установка и запуск самописной службы
    #39954353
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mandarin,

вообще параметры командной строки при установке службы нормально работают.
пример вызова:
Код: pascal
1.
myservice.exe /install /binPath:"c:\MyService.exe" /timeout:3600 /log:false



для обработки параметров командной строки можно использовать примерно такой код:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
procedure TMyService.ServiceAfterInstall(Sender: TService);
var
  I: Integer;
  LValue: string;
  LPos: Integer;
  LParamName: string;
  LParamValue: string;
begin
  if System.ParamCount > 0 then
  begin
    for I := 1 to System.ParamCount do
    begin
      LValue := Trim(System.ParamStr(I));

      if CharInSet(LValue[Low(LValue)], ['-', '/']) then
      begin
        LPos := LValue.IndexOf(':');
        if LPos > 1 then
        begin
          LParamName := LValue.Substring(1, LPos - 1);
          LParamValue := Trim(LValue.Substring(LPos + 1));
        end
        else
        begin
          LParamName := LValue.Substring(1);
          LParamValue := '';
        end;

        if LParamName <> '' then
        begin
          if LParamName = 'binPath' then // что то делаем со значением этого параметра, лежит в LParamValue 
          else if LParamName = 'timeout' then // что то делаем со значением этого параметра и так далее
        end;
      end;
    end;
  end;
end;



так же ничего не мешает считывать параметры командной строки в ServiceExecute.
А зависание может быть по разным причинам, например отсутствие прав
...
Рейтинг: 0 / 0
Установка и запуск самописной службы
    #39954354
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mandarin
Пробую установить службу так sc.exe create MyService binPath= "c:\MyService.exe" в Этом случае можно передать параметры.
Получаю сообщение что служба установилась, вижу свою службу в списке служб, но служба не запускается. При запуске службы висит окно с процессом запуска, а потом выкидывает сообщение что служба не ответила на запрос своевременно.
В службе ошибка парсинга параметров. Ошибка в том коде, который вы не привели
...
Рейтинг: 0 / 0
Установка и запуск самописной службы
    #39954355
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mandarinпочему не запускается служба при установке через sc.exe?

Потому что в ней баг. Причём этот баг может быть как в твоём коде, так и в TService,
который весьма крив сам по себе и сопровождается кривыми примерами своего использования.

Поэтому я рекомендую о TService забыть и создавать службу на чистом WinAPI. Она и работать
будет лучше и поиск проблем значительно упрощается.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Установка и запуск самописной службы
    #39954362
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через sc можно устанавливать службу..
Есть только нюанс..
Имя службы обязательно должно совпадать с Name в TService
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Установка и запуск самописной службы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]