是否可以创建TService的后代并发布我自己的属性?

Jer*_*dge 3 delphi service properties project-template

在Delphi中提供了一些不同的服务后,我意识到TService缺少服务应用程序应该带来的一些必要的东西,例如日志记录,异常处理和注册表中的"描述"属性.

我想知道我是否可以创建自己的服务shell,例如TJDService从一个继承的服务shell,TService但有一些额外的东西,例如在对象检查器中显示的"描述"属性.我可以像这样制作自己的服务外壳吗?我知道我可以创建自己的"默认项目"继承自a,TService但包括我的所有代码和任何新项目.

创建新服务时,它应如下所示:

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.SvcMgr,
  JDServices;

type
  TJDService1 = class(TJDService)
  private

  public
    function GetServiceController: TServiceController; override;
  end;

var
  JDService1: TJDService1;

implementation

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  JDService1.Controller(CtrlCode);
end;

function TJDService1.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;

end.
Run Code Online (Sandbox Code Playgroud)

与典型服务相同,但使用my TJDService而不是just TService.

Dav*_*nan 6

简单的问题与一个简单的答案.是的,你可以这样做.我自己这样做是为了在我公司的代码库中实现的各种服务之间共享代码.

RegisterCustomModuleDescription在Object Inspector中显示属性的方法.话虽如此,我发现在Object Inspector中设置这些服务属性的能力并不是那么有价值.我认为在运行时在代码中设置它们是完全可以接受的,但是这个决定取决于个人偏好.

即使您使用RegisterCustomModuleIDE已知服务类,默认的新服务应用程序也不会使用您的服务类.您可以根据需要自定义默认服务应用程序,然后将其保存到对象存储库.

在这里的答案显示了我如何实现一个可以作为服务运行的应用程序,也可以作为标准桌面进程运行以进行调试.

  • @user我认为我的答案现在涵盖了整个问题.谢谢. (3认同)
  • 我不赞成"是的,我也是!" 样式答案:p只有您的评论才会显示您的建议是什么样的现有解决方案.@kobik同意你的意见,我没有.(同时,标题写着:"发布我自己的财产") (2认同)