在delphi中创建Windows服务

时间:2011-05-19 15:01:25

标签: delphi windows-services

我在delphi中创建了一个Windows服务。我的代码在ServiceExecute

中运行
procedure TMyService.ServiceExecute(Sender: TService);
 while not Terminated do
 begin
      CallSomeProcedure;  
      Sleep(1000);
      ServiceThread.ProcessRequests(false);
 end;
end;

不幸的是,我无法运行此代码。即使在我调试时,我似乎也没有调用该过程。 Myservice.exe中的代码如下所示。

begin 
    if not Application.DelayInitialize or Application.Installing then
       Application.Initialize;
    Application.CreateForm(TMyService, MyService);
    Application.Run;
end.

如果我添加

,我可以运行serviceExecute
MyService.ServiceExecute(nil);

进入MyService.exe但是如果我将其作为服务安装,它似乎不会像Application.Run那样运行

不确定我做错了什么,但是非常感谢任何帮助。

由于

3 个答案:

答案 0 :(得分:8)

您不能只从IDE运行服务来调试它;在那种情况下,它将退出。该服务必须由服务控制管理器启动。此外,您不应该直接调用ServiceExecute。

这是documentation如何调试服务。

答案 1 :(得分:4)

如果您已创建服务,则可以通过使用参数/install

运行它来安装它

之后,该服务应显示在您的其他服务之间(转到start/run/并输入services.msc)。

然后你可以启动它,你可以通过将调试器附加到它来调试它。

然而,这样工作很痛苦。我无法相信有些人实际上是这样工作的。我通常将所有业务逻辑放在单独的单元中,我可以从“普通”应用程序运行。只有当它运作良好时,我才将它包装在一个服务中并尝试。

有时我甚至创建一个既可以作为服务也可以作为GUI运行的应用程序。您可以简单地实例化您的服务类。你只需要自己启动它,但调试起来会容易得多。

答案 2 :(得分:1)

专门为简化服务调试过程而开发的commercial solution。您可以直接从Delphi IDE debug your code,包括服务的OnStart事件。