2010-11-24 27 views
1

Windowsサービスにパラメータを渡そうとしていますが、OnStartメソッドの引数は常に空です。Windowsサービスに引数を渡す方法

protected override void OnStart(string[] args) 
     { 
      System.Diagnostics.Debugger.Launch(); 
     } 

私は、同じマシン上にインストールされ、私のサービスの複数のインスタンスを持っています。それぞれは別の設定を使用する必要がありますので、アイデアはサービス名を取得し、それに従って正しい設定を読み込みます。

答えて

1

サービスアプレットを介してパラメータを渡していますか?サービスはコマンドライン引数を受け入れることができず、代わりに "コンピュータ管理"ウィンドウのサービスアプレットを介して渡されなければなりません。

+0

「開始パラメータ」フィールドに追加しようとすると、空の引数がまだ残っています。 – UshaP

+0

何かがオフになっている必要があります。開始パラメータは、あなたが言及したargs配列に変換されます。また、インストーラでこれらのパラメータを指定する記事を見つけました。http://stackoverflow.com/questions/200163/am-i-running-as-a-service/2111492#2111492 –

0

サービス名をご希望の場合は、ServiceBase.ServiceNameをご覧ください。

protected override void OnStart(string[] args) 
{ 
    switch (this.ServiceName) 
    { 
     // .... 
    } 
} 

システム内で簡単に変更できるサービス名に基づいて設計されていないものも考えてください。

+0

サービス名は常に同じです。私はパラメータを渡したい – UshaP

+0

同じ名前の複数のサービスをどのように持つつもりですか(これはできません)? –

+0

サービス名は一意でなければなりませんが、this.ServiceNameを取得すると常にservice1が返されます – UshaP

0

アプリケーション設定ファイルを自動生成する設定ファイル(右クリック、項目の追加、設定)を使用します。次に、各インスタンスのbin内で、config内の値を設定することができます。実行している場合、別の場所から値を取り出すことができます。

1つの場所から複数のサービスインスタンスが実行されている場合、設定ファイルのアプローチは機能しません。その場合は、void main(string[] args)メソッドを持つ通常のexeをお勧めします。次に、Windowsのタスクスケジューラを使用して引数とスケジューリングを定義できます。