2011-08-15 17 views
0

http://msdn.microsoft.com/en-us/library/zt39148a.aspx#Y684に記載されている手順に従って、私は正常にインストールしてテストしたWindowsサービスを作成しました。しかし、私はサービスをインストールするために使用されたコンポーネントの何かに困惑しています。コンポーネントデザイナで、使用されていない(使用されていない)サービスインストーラオブジェクトが生成されるのはなぜですか?

サービスのインストールは、デザイナーが作成したProjectInstallerクラスで行います(下記参照)。このクラスは、installutil.exe(.NET Framework)でサービスおよび関連するサービスプロセスをインストールするために使用されます。デザイナーが生成したコードでは、インストール時にサービス用にMyServiceInstaller、サービスプロセス用にMyServiceProcessInstallerの2つのインストーラーオブジェクトが作成され、installutil.exeで使用されます。ただし、後者のみをInstallersコレクションに挿入します。

サービス自体はどのようにインストールされますか?サービスプロセスとともに明示的にサービスがインストールされていない場合、サービスプロセスの「デフォルトサービス」はありますか?

CODE:(。。あなたはこれを試している場合、あなたはデザイナーは、実際には2つの部分のクラスを使用して、このクラスを作成していることがわかります、私は簡単にするために、単一のクラスにこれらを統合しています)

namespace MyService 
{ 
    [RunInstaller(true)] 
    public class ProjectInstaller : System.Configuration.Install.Installer 
    { 
     public ProjectInstaller() 
     { 
      InitializeComponent(); 
     } 

     /// <summary> 
     /// Required method for Designer support - do not modify 
     /// the contents of this method with the code editor. 
     /// </summary> 
     private void InitializeComponent() 
     { 
      this.MyServiceProcessInstaller = new System.ServiceProcess.ServiceProcessInstaller(); 
      this.MyServiceInstaller = new System.ServiceProcess.ServiceInstaller(); 
      // 
      // MyServiceProcessInstaller 
      // 
      this.MyServiceProcessInstaller.Account = System.ServiceProcess.ServiceAccount.LocalSystem; 
      this.MyServiceProcessInstaller.Password = null; 
      this.MyServiceProcessInstaller.Username = null; 
      // 
      // MyServiceInstaller 
      // 
      this.MyServiceInstaller.ServiceName = "MyService"; 
      // 
      // ProjectInstaller 
      // 
      this.Installers.AddRange(new System.Configuration.Install.Installer[] { 
      // *** Expected here: this.MyServiceInstaller, 
      this.MyServiceProcessInstaller}); 
     } 

     private System.ServiceProcess.ServiceProcessInstaller MyServiceProcessInstaller; 
     private System.ServiceProcess.ServiceInstaller MyServiceInstaller; 
    } 
} 
+0

私は漠然とこれらのいずれかがinstallutil' 'で使用されていて、Windowsインストーラをビルドする場合は、他のが使用されていることを読んで思い出します。しかし、私は間違っている可能性があります。 –

+0

@Joe - ありがとう、私はそれを可能性として見ています。 –

+0

これは説明していますか? http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceinstaller(v=vs.80).aspx –

答えて

0

ServiceInstallerをインストーラのコレクションに追加する必要があります。私は記事で説明したのと同じ手順に従って、それが正しく出てきた:

private void InitializeComponent() 
{ 
    this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller(); 
    this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller(); 
    // 
    // serviceProcessInstaller1 
    // 
    this.serviceProcessInstaller1.Password = null; 
    this.serviceProcessInstaller1.Username = null; 
    // 
    // serviceInstaller1 
    // 
    this.serviceInstaller1.ServiceName = "Service1"; 
    // 
    // ProjectInstaller 
    // 
    this.Installers.AddRange(new System.Configuration.Install.Installer[] { 
     this.serviceProcessInstaller1, 
     this.serviceInstaller1}); 

} 
+0

遅い返事をして申し訳ありません。とても忙しい。練習として、サービスを作成するための所定の手順を繰り返し、期待どおりの結果を得ました(つまり、あなたと同じです)。しかし、私がこれを最初にやったときには、サービス自体ではなく、サービスプロセスのインストーラしか得られなかったことを知っています。デザイナーが生成したコードをハックしませんでした。私はそれをインストールし、サービスは正常に実行されました。だから、デザイナーが私の質問に書かれているように振る舞うケースがあると思うが、これ以上の時間を費やす価値はない。これを見ていただきありがとうございます。 –

関連する問題