在delphi中创建Windows服务

use*_*275 6 delphi windows-services

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

procedure TMyService.ServiceExecute(Sender: TService);
 while not Terminated do
 begin
      CallSomeProcedure;  
      Sleep(1000);
      ServiceThread.ProcessRequests(false);
 end;
end;
Run Code Online (Sandbox Code Playgroud)

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

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

如果我添加,我可以运行serviceExecute

MyService.ServiceExecute(nil);
Run Code Online (Sandbox Code Playgroud)

进入MyService.exe然而,如果我将其作为服务安装,它似乎不会作为Application.Run什么也不做

不知道我做错了什么,但任何帮助都会非常感激.

谢谢

Ond*_*lle 8

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

这是如何调试服务的文档.


Wou*_*ick 5

如果您已经创建了服务,则可以通过使用参数运行它来安装它/install

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

然后您可以启动它,并且可以通过附加调试器来调试它。

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

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