我在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.
如果我添加
,我可以运行serviceExecuteMyService.ServiceExecute(nil);
进入MyService.exe但是如果我将其作为服务安装,它似乎不会像Application.Run那样运行
不确定我做错了什么,但是非常感谢任何帮助。
由于
答案 0 :(得分:8)
您不能只从IDE运行服务来调试它;在那种情况下,它将退出。该服务必须由服务控制管理器启动。此外,您不应该直接调用ServiceExecute。
这是documentation如何调试服务。
答案 1 :(得分:4)
如果您已创建服务,则可以通过使用参数/install
之后,该服务应显示在您的其他服务之间(转到start/run/
并输入services.msc
)。
然后你可以启动它,你可以通过将调试器附加到它来调试它。
然而,这样工作很痛苦。我无法相信有些人实际上是这样工作的。我通常将所有业务逻辑放在单独的单元中,我可以从“普通”应用程序运行。只有当它运作良好时,我才将它包装在一个服务中并尝试。
有时我甚至创建一个既可以作为服务也可以作为GUI运行的应用程序。您可以简单地实例化您的服务类。你只需要自己启动它,但调试起来会容易得多。
答案 2 :(得分:1)
专门为简化服务调试过程而开发的commercial solution。您可以直接从Delphi IDE debug your code,包括服务的OnStart事件。