2011-11-14 14 views
5

タイマーでログをメールで送信するアプリケーションを作成しました。このアプリケーションは最小限のユーザーインターフェイスを持ち、設定ファイルがあると、ユーザーとのやりとりを必要とせずに起動できます。スタンドアロンEXEとWindowsサービスの切り替え

現在のところ、VCLフォームアプリケーションですが、サーバー上で実行しているときにアプリケーションを実行するだけでユーザーセッションを開く必要はありません。

あなたは両方の世界を持つために何をお勧めしますか?シンプルなシナリオでは(ちょっとした組織で、3つのPCだけでITマネージャはいない)、「非サービス」は理解しやすく使いやすいので良いですが、大きな組織ではサービスの欠如が問題です。

サービスと非サービスは同時にできますか?これを達成する方法は?私は配備をより複雑にしたくありません。私が気にしているのは、いくつかのコマンドラインスイッチです。コマンドラインのparamersを使って実行すると、通常のアプリケーションではないにしても、サービスになる可能性があります。

+5

一つは、あなたが望むものを行うコードを示します:としてもインストールすることができます[スタンドアロンのDelphiアプリケーションのhttp://stackoverflow.com/questions/6594152 –

+3

可能重複Windowsサービス](http://stackoverflow.com/questions/2387383/a-standalone-delphi-application-that-c​​an-also-be-installed-as-windows-service) – gabr

答えて

5

OK ...最善の方法は、同じプロジェクトで 'サービス'と '非サービス'アプリケーションを開発することです。 A standalone Delphi application that can also be installed as windows serviceのように説明します。 サービスと同じアプリケーションを使用することも、スタンドアロンアプリケーションとして使用することもできます。

あなたは同じPC上の両方を持っているしたい場合は、それはより複雑である:あなたは、スタンドアロンのアプリケーションでは、機能を追加する必要があります。

  • Verifiyサービスが実行してアクティブにされている場合。
  • サービスが実行中でアクティブな の場合は、 スタンドアロンプ​​ロセスを実行する代わりに、ダイアログボックスを使用する必要があります。
0

私が行っているのは、開発用のプロジェクトだけです。私はちょうどフォームを作成し、サービスを作成して呼び出しを期待します。

unit fTestHarness; 

    interface 

    uses 
    uMyServiceModule, 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms; 

    type 
    TfrmCentralTest = class(TForm) 
     Label1: TLabel; 
     Label2: TLabel; 
     procedure FormCreate(Sender: TObject); 
     procedure FormClose(Sender: TObject; var Action: TCloseAction); 
    private 
     { Private declarations } 
    public 
     { Public declarations } 
    end; 

    var 
    frmTest: TfrmTest; 

    implementation 

    {$R *.dfm} 

    procedure TfrmCentralTest.FormCreate(Sender: TObject); 
    var 
    bStarted : boolean; 
    begin 
    bStarted := False; 
    MyService := TMyService.Create(self); 
    MyService.ServiceStart(nil, bStarted); 
    end; 

    procedure TfrmCentralTest.FormClose(Sender: TObject; var Action: TCloseAction); 
    var 
    bStopped : boolean; 
    begin 
    MyService.ServiceStop(nil, bStopped); 
    end; 

    end. 
1

あなたのアプリケーションに必要な設定を設定し、次にあなたのアプリケーションをサービスに変換するコントロールパネルアプレットを作成します。コントロールパネルのアプレットは、サービスを開始、停止、再起動することもできます。

あなたは今、両方の世界のベストを持っています。

ジョン

異なる質問に対する私の答えの
+0

コントロールパネルのアプレットはまだ存在しますか?私は彼らがVistaの後に死んだと思った。また、コントロールパネルアプレットがどのように何を解決するのかについても苦労しています。多分私は今日はちょうど遅いです。 –

+0

コントロールパネルのアプレットを作成する必要がある場合は、Delphi XE2が必要で、32ビットと64ビットのコントロールパネルアプレットをビルドする必要があります。 –

+0

@WarrenP ... 32ビットCPアプレットは64ビットシステム/ OS上で動作し、32ビットサービスも64ビットシステム/ OS上で動作します。 – John

関連する問題