Delphi параметры командной строки Windows Services

Вы также можете преобразовать их в один и тот же случай, используя toLowerCase () или toUpperCase ():

 if (!contacts.getUid().toLowerCase().equals(firebaseUser.getUid().toLowerCase())) {
     arrayList.add(contacts);
 }
6
задан Community 23 May 2017 в 12:30
поделиться

6 ответов

Хорошо, после некоторого исследования, я разочаровался в изящном подходе и выбрал простую путь из записи непосредственно в реестр.

Для создания вещей простыми я сделал это: Я храню аргументы, которые я хотел передать в переменных своему TService. Затем я установил событие AfterInstall для записи непосредственно в реестр (использующий объект TRegistry) точная командная строка, которую я хотел.

uses Registry;
procedure MyService.AfterInstall(Sender: TObject) ;
var
  reg:TRegistry;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := 'HKEY_LOCAL_MACHINE';
    if reg.OpenKey('SYSTEM\CurrentControlSet\Services\MyService', True) then
    begin
      reg.WriteExtendString ('ImagePath', ParamStr(0) + ' -some -arguments') ;
      reg.CloseKey;
    end;
  finally
    reg.Free;
  end;
end;

Не изящное решение, которое я искал, но это делает задание.

Спасибо за другие ответы через!

8
ответ дан 8 December 2019 в 14:48
поделиться

Сервисные аргументы могут быть переданы в lpBinaryPathName аргументе функции CreateService. В TService Delphi это называют в TServiceApplication. RegisterServices. InstallService, который Вы не можете переопределить (легко).

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

4
ответ дан 8 December 2019 в 14:48
поделиться

Я не думаю, что можно заставить сервис запуститься с них, но если Вы храните те параметры в реестре, можно изменить программу к на будущем, запускается, всегда идут и захватывают их. (т.е. если ParamCount = 0 затем получают параметрические усилители из реестра),

0
ответ дан 8 December 2019 в 14:48
поделиться

Pablo, я имел тот же вопрос и ничего не мог найти и пошел путем редактирования реестра также. Кроме того, я использую Пользовательские действия также для создания дополнительных каталогов установки и файлов копии (в C#). Ваше предложение было полезно, и я прекратил искать "изящный" путь также.спасибо

0
ответ дан 8 December 2019 в 14:48
поделиться

Для правильной установки службы и ее настройки следует использовать SCM API. SC.EXE - это интерфейс командной строки к SCM API. Вы не должны манипулировать реестром напрямую в этой ситуации, это работает, но это также зависит от того, какие разрешения имеет учетная запись службы. В любом случае, мне интересно, зачем нужны аргументы командной строки, если вы внедряете их в код - обычно эти аргументы задаются вне службы (программой установки, конфигуратором, чем угодно), чтобы изменить поведение службы.

2
ответ дан 8 December 2019 в 14:48
поделиться

Я только что обнаружил кое-что удивительное, может быть, стоит поделиться.

Вы можете указать параметры для служб Windows (по крайней мере) следующими способами:

  1. Введите его в графическом интерфейсе диспетчера служб как "Startparameter".
  2. Передать его в качестве аргументов в: sc.exe YourService param1 param2
  3. Внести его в реестр в записи ImagePath=..\YourService.exe param1 param2

В Delphi есть 2 способа запросить параметры приложения/службы:

  • System.ParamCount/System.ParamStr: Этим способом вы получаете параметры из 3. выше.
  • TService.ParamCount/TService.Param[]: Так вы получите параметры 1. и 2. выше.
2
ответ дан 8 December 2019 в 14:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: