我写了一个应用程序,在计时器上通过邮件发送日志。该应用程序具有简约的用户界面,一旦配置文件存在,它就可以在不需要与用户交互的情况下启动。
目前它是一个VCL Forms应用程序,但在某些情况下最好有一个服务(这样在服务器上运行时就不需要打开用户会话来运行应用程序)。
你有什么建议同时拥有这两个世界?在一些简单的场景中(小型组织,只有3个人,没有IT经理),“非服务”很好,因为它更容易理解和使用,但在更大的组织中,缺乏服务是一个问题。
是否可以同时提供服务和非服务?怎么做到这一点?我不想让部署更复杂,我想到的是一些命令行开关:当使用命令行参数运行时,它可以是一个服务,如果不是一个普通的应用程序......如何做到这一点?)。
答案 0 :(得分:5)
好的......最好的方法是在同一个项目中开发“服务”和“非服务”应用程序。 就像这里解释的那样:A standalone Delphi application that can also be installed as windows service。 因此,您可以将相同的应用程序用作服务或独立应用程序。
如果你想在同一台PC上同时使用它们,那就更复杂了:你必须在独立的应用程序中添加功能:
答案 1 :(得分:1)
我会创建一个控制面板小程序,用于设置应用程序所需的配置,然后将您的应用程序转换为服务。您的控制面板小程序也可以启动,停止和重新启动服务等。
你现在拥有两全其美。
约翰
答案 2 :(得分:0)
我所做的是有一个单独的项目,仅供开发使用。我只是创建一个表单,然后创建服务并进行预期的调用。
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.