Переключение между автономным EXE и службой Windows - PullRequest
5 голосов
/ 14 ноября 2011

Я написал приложение, которое по таймеру отправляет логи по почте.Это приложение имеет минималистичный пользовательский интерфейс, и как только файл конфигурации находится там, он может запускаться без необходимости взаимодействия с пользователем.

В настоящее время это приложение VCL Forms, но в некоторых случаях было бы хорошоиметь службу (таким образом, при работе на сервере нет необходимости открывать пользовательский сеанс только для запуска приложения).

Что вы предлагаете для того, чтобы иметь оба мира?В некотором простом сценарии (небольшая организация, в которой всего 3 шт. И нет ИТ-менеджера) «не сервис» хорош, потому что его легче понять и использовать, но в более крупной организации проблема заключается в отсутствии сервиса.

Можно ли иметь сервис и не сервис одновременно?Как этого добиться?Я не хочу усложнять развертывание, я имею в виду какой-то переключатель командной строки: при запуске с параметрами командной строки это может быть служба, если не обычное приложение ... Как это сделать?).

Ответы [ 3 ]

6 голосов
/ 14 ноября 2011

ОК ... лучший способ - разработать приложение «сервис» и «сервис» в одном проекте. Как объяснено здесь: Автономное приложение Delphi, которое также можно установить в качестве службы Windows . Таким образом, вы можете использовать то же приложение, что и сервис, или как отдельное приложение.

Если вы хотите иметь оба на одном ПК, это более сложно: вы должны добавить в автономном приложении функции:

  • Проверка, если служба работает и активна.
  • Если услуга работает и активен, вы должны диалог с ним вместо запуска автономный процесс.
1 голос
/ 14 ноября 2011

Я бы создал апплет панели управления, который устанавливает конфигурацию, необходимую для вашего приложения, а затем преобразовал бы ваше приложение в службу.Апплет панели управления также может запускать, останавливать и перезапускать службу и т. Д.

Теперь у вас есть лучшее из обоих миров.

Джон

0 голосов
/ 14 ноября 2011

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

  unit fTestHarness;

  interface

  uses
     uMyServiceModule,
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms;

  type
    TfrmCentralTest = class(TForm)
      Label1: TLabel;
      Label2: TLabel;
      procedure FormCreate(Sender: TObject);
      procedure FormClose(Sender: TObject; var Action: TCloseAction);
    private
      { Private declarations }
    public
      { Public declarations }
    end;

  var
    frmTest: TfrmTest;

  implementation

  {$R *.dfm}

  procedure TfrmCentralTest.FormCreate(Sender: TObject);
  var
     bStarted : boolean;
  begin
     bStarted := False;
     MyService := TMyService.Create(self);
     MyService.ServiceStart(nil, bStarted);
  end;

  procedure TfrmCentralTest.FormClose(Sender: TObject; var Action: TCloseAction);
  var
     bStopped : boolean;
  begin
     MyService.ServiceStop(nil, bStopped);
  end;

  end.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...