如何在 Windows 上调试 Delphi 编写的服务?

Sar*_*ara 4 delphi service windows-services

有谁知道如何在Windows上调试Delphi编写的服务(服务应用程序)?

我正在制作一个 API,从 rclone 获取数据并将其显示在界面上,我想将其制作成 Windows 服务。如果您认为有什么可以帮助我的,我将不胜感激。

Rem*_*eau 7

您可以像任何其他应用程序一样调试它。唯一的技巧是你必须先在SCM中启动服务,然后你可以将Delphi的调试器附加到服务进程中,然后调试就可以正常进行。

在我自己的服务中,我通常在事件中添加代码TService.OnStart以在属性中查找/debugger-style 参数TService.Param,如果存在,则IsDebuggerPresent()在等待循环中使用,直到调试器附加,然后再继续正常的服务逻辑。该值可以在 SCM 启动参数中传递。例如:

procedure TMyService.ServiceStart(Sender: TObject;
  var Started: Boolean);
var
  I: Integer;
  StartTicks: DWORD;
begin
  for I := 0 to Self.ParamCount-1 do
  begin
    if Self.Param[I] = '/debugger' then
    begin
      StartTicks := GetTickCount;
      repeat
        Sleep(Self.WaitHint-100);
        Self.ReportStatus;
      until IsDebuggerPresent or
            ((GetTickCount - StartTicks) >= 30000);
    end;
  end;
  Started := True;
end;
Run Code Online (Sandbox Code Playgroud)