2011-05-17 81 views
4

我有一個項目,其中包括2個窗口服務。我創建一個ProjectInstaller來安裝這些項目,這很好。但我有一個問題;根據下面定義的代碼,項目安裝程序如何知道爲serviceInstaller1安裝哪個服務以及爲serviceInstaller2安裝哪個服務?一個裝配中的多個服務。安裝程序如何知道要安裝並啓動哪個服務?

它只是基於ServiceName嗎?

[RunInstaller(true)] 
public partial class ProjectInstaller : System.Configuration.Install.Installer 
{ 
    private ServiceProcessInstaller process; 
    private ServiceInstaller serviceInstaller1; 
    private ServiceInstaller serviceInstaller2; 
    public ProjectInstaller() 
    { 
     InitializeComponent(); 
     try 
     { 
      process = new ServiceProcessInstaller(); 
      process.Account = ServiceAccount.LocalSystem; 
      serviceInstaller1 = new ServiceInstaller(); 
      serviceInstaller1.ServiceName = "xxx"; 
      serviceInstaller1.Description = "Does Something"; 
      serviceInstaller1.StartType = ServiceStartMode.Automatic; 

      serviceInstaller2 = new ServiceInstaller(); 
      serviceInstaller2.ServiceName = "yyy"; 
      serviceInstaller2.Description = "Does something else"; 
      serviceInstaller2.StartType = ServiceStartMode.Automatic; 
      Installers.Add(process); 
      Installers.Add(serviceInstaller1); 
      Installers.Add(serviceInstaller2); 
     } 
     catch (Exception ex) 
     { 
      throw new Exception("Failed", ex); 
     } 
    } 
} 

回答

4

它基於ServiceName

安裝程序並不關心名稱,您可以提供幾乎任何名稱,安裝程序將很樂意爲您註冊一個帶有此名稱的Windows服務,但是當您嘗試啓動服務時,它將失敗,除非它在您的程序集中找到與安裝程序中指定的ServiceName匹配的ServiceName服務。

Error 1083: The executable program that this service is configured to run in does not implement the service. 
+0

還有一個問題,當僅使用一個服務進行部署時,我假設名稱並不重要,因爲它只是安裝它找到的第一個服務。它是否正確? – 2011-05-18 08:53:39

+2

@Mick Walker - 如果您在安裝程序中有一項服務,並且您爲'ServiceBase.Run()'方法提供了一項或多項服務,則無論服務名稱如何,集合中的第一項服務都將被使用。 – 2011-05-18 15:59:20

+0

如果我需要使用不同憑據從一個程序集創建兩個服務,該怎麼辦? – Kobor42 2013-10-18 14:15:00

相關問題