3

TServiceDelphiでいくつかのさまざまなサービスを作成した後、ロギング、例外処理、レジストリの「Description」プロパティなど、サービスアプリケーションに必要なものがいくつか不足していることに気付きました。

オブジェクトインスペクターに表示される「Description」プロパティなど、いくつかの追加機能を使用して、TJDServiceから継承されるような独自のサービスシェルを作成できるかどうか疑問に思いました。TServiceこのような独自のサービスシェルを作成できますか?から継承する独自の「デフォルトプロジェクト」を作成できることはわかっています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.

通常のサービスと同じですが、のTJDService代わりにmyを使用しTServiceます。

4

4 に答える 4

6

簡単な答えと簡単な質問。はい、これを行うことができます。私は、会社のコードベースに実装されているさまざまなサービス間でコードを共有するために、まさにこれを自分で行っています。

RegisterCustomModuleDescriptionプロパティをオブジェクトインスペクターに表示する方法です。そうは言っても、オブジェクトインスペクターでこれらのサービスプロパティを設定する機能がそれほど価値があるとは思いません。実行時にコードでそれらを設定することは完全に許容できると思いますが、その決定は個人的な好みに依存します。

サービスクラスをIDEに認識させるために使用する場合でもRegisterCustomModule、デフォルトの新しいサービスアプリケーションはサービスクラスを使用しません。デフォルトのサービスアプリケーションを必要に応じてカスタマイズし、それをオブジェクトリポジトリに保存できます。

ここでの私の答えは、デバッグ目的でサービスまたは標準のデスクトッププロセスとして実行できるアプリを実装する方法を示しています。

于 2012-02-12T19:46:06.273 に答える
3

はい、できます。その方法については、以下のリンクをご覧ください。

http://www.marcocantu.com/ddh/ddh15/ddh15e.htm

于 2012-02-12T20:48:02.243 に答える
2

自分で作業を行う必要がない場合、SvComは、Delphiでサービスを作成するための優れたツールのセットを提供します。これらのツールは、箱から出してすぐに利用できるものよりもはるかに多くのものを提供します。

于 2012-02-12T22:47:09.990 に答える
1

ここでは反逆者になりますが、これを行う最も簡単な方法は、SvcMgrの独自のコピーを作成し、そこで変更を加えることです。実行時にアクセスされる変更のみを行う限り、SvcMgrの独自のローカルコピーを使用してビルドおよび実行します。これは、サービスに付属する基本的な例外処理とアプリケーションロギングを変更するために行います。また、SvcMgr.pasのコピーを私のWebサイトからダウンロードできます。

これは、設計時の変更が必要な場合は機能しませんが、設計時に行うほとんどすべてのことは、とにかく実行時に行うことができます。より良い解決策はありますが、より速くて簡単なものはありません。

于 2012-02-12T22:54:04.070 に答える