2012-06-12 3 views
5

私は、いくつかの場合にシステム内で実行されているサービスを持っています。サービスからDISPLAY_NAMEを見つける必要があります。私はServiceBase.ServiceNameを試しましたが、(おそらく)この場合は役に立たないプロジェクトインストーラからサービスの名前を返します。.netでサービスの "表示名"を見つけるには?

サービスはinstallutilでインストールされ、パラメータは/name=です。

編集

私はイムランBalouchの回答に基づいて、回避策を持っています。私はインストーラMe.Context.Parameters("name")の名前を読んで、ImagePathレジストリサブキーに書き込み、サービスのEnvironment.GetCommandLineArgsでそれを読んでいます。

答えて

4

あなたのWindowsサービスプロジェクトにProjectInstallerを追加しましたか? ServiceInstallerよりもyesの場合は、サービスにServiceInstallerを追加し、そのServiceInstallerにサービスの表示名を指定できます。それのServiceInstallerを選択し、プロパティに設定されたDisplay NameまたはとしてProjectInstaller.Designer.csInitializeComponentまたはProjectInstaller.Designer.vbであなたは、表示名を指定することができます:それはエラーで停止

this.yourServiceInstaller.DisplayName = "Service Display Name"; 
+0

サービスは、指定された名前でinstallutilによってインストールされます。 – IvanH

+0

しかし、あなたはWindowsサービスプロジェクトにプロジェクトインストーラを追加したでしょうか? –

+1

はい、MultiProjectInstaller.vbがあります。ですから、/ nameを(可能ならばそれを設定して)読みとることもできます。 – IvanH

2

あなたはServiceControllerクラス使用することによって、その短いServiceNameに与えられ、サービスの表示名を取得することができます:それはあなた自身のクラスのメンバーだとしてあなたは、簡単にServiceNameを得ることができ、あなたが言ったように

ServiceController sc = new ServiceController(this.ServiceName); 
var displayName = sc.DisplayName; 

を、 ServiceBaseから継承されます。サービス名は異なるとなります。これは一意の識別子なので、同じマシン上で実行されているサービスのインスタンスごとに異なります。

+1

「パラメータ名の値が無効です。」私は正しい名前を指定すると動作しますが、それは私が探しているものです。 – IvanH