2009-07-27 13 views
9

Windowsサービス用のインストーラを使用しようとしていますが、InstallUtil.exeの使用を避けたいと考えています。インストーラが正しく動作するように見えますが(実行可能ファイルとdllは正しいディレクトリにあります)、コンピュータ管理には表示されません。Windowsサービスインストーラがサービスを登録していない

は、ここで私はこれまで何をやったかです:

サービスクラス名がデフォルトです - サービス1。

プロジェクトインストーラでは、サービスインストーラのServiceNameがクラス名 - Service1と一致します。

カスタムアクションでは、サービスの主な出力がインストール、コミット、ロールバック、およびアンインストールに追加されました。

参考として、http://support.microsoft.com/kb/816169を使用しています。

アイデア?

答えて

15

サービスプロジェクトにインストーラークラスがありますか?

[RunInstaller(true)] 
public partial class Service1Installer : Installer 
{ 
    public Service1Installer() 
    { 
     InitializeComponent(); 
     ServiceProcessInstaller process = new ServiceProcessInstaller(); 
     process.Account = ServiceAccount.LocalSystem; 

     ServiceInstaller serviceAdmin = new ServiceInstaller(); 
     serviceAdmin.StartType = ServiceStartMode.Manual; 
     serviceAdmin.ServiceName = "Service1"; 
     serviceAdmin.DisplayName = "Service1"; 
     serviceAdmin.Description = "Service1"; 

     Installers.Add(serviceAdmin); 
    } 
} 
+0

それは私が行方不明だった。私は、Installers.Add()の部分が自動生成されたDesignerコードに含まれると考えましたが、そうではありませんでした。多分彼らはそれを変えたのだろうか? –

+0

はい私はあなたが投稿したのと同じようにそれを理解しているのを見た – SpaceghostAli

3

サービスプロジェクトにServiceInstallerクラスとServiceProcessInstallerクラスが作成されていることを確認してください。 (詳細についてはthis linkをチェックしてください)。

コンピュータの管理とサービスウィンドウを閉じ、インストーラを再度実行して、サービスウィンドウを再度開きます。

それでも解決しない場合は、コンピュータを再起動してください。いくつかのファイルがロックされている可能性があります。

これが正しく動作するには、マシン上で管理者権限が必要なことは言うまでもないでしょう。

+0

リンクのサンプルコードは正しいトラックにあります。ありがとうございました。 –

0

私はそれを理解したと思います。それはデザイナーコードのバグかもしれないし、おそらく私はステップを逃した。

私はのInitializeComponent()メソッドでは、それは追加することになっています、デザイナーのコードで考える:

this.Installers.AddRange(new System.Configuration.Install.Installer[] {this.serviceProcessInstaller1, this.serviceInstaller1}); 

それがなかったので、私はProjectInstallerコンストラクタでこれを追加しました:

Installers.Add(serviceInstaller1); 
Installers.Add(serviceProcessInstaller1); 

インストール時に、コンピュータ管理にサービスとして表示されます。

関連する問題