在delphi中创建Windows服务

在delphi中创建Windows服务,delphi,windows-services,Delphi,Windows Services,我已经在delphi中创建了一个windows服务。我的代码在ServiceExecute中运行 procedure TMyService.ServiceExecute(Sender: TService); while not Terminated do begin CallSomeProcedure; Sleep(1000); ServiceThread.ProcessRequests(false); end; end; 不幸的是,我无法运行此代

我已经在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.
如果我添加

MyService.ServiceExecute(nil);
但是,如果我将其作为服务安装,它似乎不会作为应用程序运行。Run不执行任何操作

我不知道我做错了什么,但如果有任何帮助,我将不胜感激


谢谢

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


以下是调试服务的方法。

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

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

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

然而,这样工作是痛苦的。我不敢相信有些人真的是这样工作的。我通常将所有业务逻辑放在单独的单元中,可以从“正常”应用程序运行。只有在效果好的时候,我才会把它包装在一个服务中,并尝试一下


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

有一个专门为简化服务调试过程而开发的。您可以直接从Delphi IDE,包括服务的OnStart事件。

在我看来没有问题。感谢您的快速响应。我现在要调试它,我只是在使用ADOQuery时遇到了问题。现在我可以调试了,应该可以解决这个问题了。ThankssvCom不仅仅是调试。它本身是一个完整的服务框架,可以替代TService。在我的TService项目中,我只需在OnStart事件处理程序的开头放置一个
IsDebuggerPresent()
循环,然后在SCM启动调试器后将其附加到服务进程。很好。