2010-10-11 99 views
1

考慮一個安裝項目的Windows服務,現在我怎麼能強制Windows服務啓動後,它完成安裝?Windows服務AutoStart

我嘗試添加項目安裝和連COMMITED我開始了服務,但那樣只會工作,如果我使用InstallUtil即時尋找一種方式,同時使用安裝項目,使之...

任何想法?

+1

'網絡啓動<服務名>' – leppie 2010-10-11 12:07:24

回答

1

您可以創建一個將使用ServiceController的類來開始你的新創建的服務新的自定義操作。

0

正如Johann Blais所建議的;首先添加一個部署項目&在「安裝」選項卡中添加自定義動作&「提交」選項卡在這些選項卡中執行所需操作,即啓動服務。

+0

你是指製作一個新的DLL並將其附加到自定義操作?或exe文件?因爲我試着用.bat,它沒有工作! – Stacker 2010-10-11 12:47:38

+0

如果您已經完成了Windows服務的OnStart功能,那麼只需將Windows服務項目的主要輸出添加到自定義操作中即可。 – KhanZeeshan 2010-10-11 12:58:08

+0

我已經做到了,但然後呢這不會迫使tyhe服務安裝後啓動 – Stacker 2010-10-11 13:10:10

1

爲了讓您的服務在安裝後立即啓動,您可以添加以下幾行代碼行。通過訂閱Committed事件,可以確保它在安裝後啓動服務。還要注意service.StartType = ServiceStartMode.Automatic;這一行,它反過來負責在自動啓動屬性爲ON的情況下安裝的服務,這使服務在系統重新啓動時自動啓動。

public class ProjectInstaller : Installer 
{ 
    private ServiceProcessInstaller process; 
    private ServiceInstaller service; 

    public ProjectInstaller() 
    { 
     process = new ServiceProcessInstaller(); 
     process.Account = ServiceAccount.LocalSystem; 
     service = new ServiceInstaller(); 
     service.ServiceName = "MyWCFServer"; 
     service.StartType = ServiceStartMode.Automatic; 
     Installers.Add(process); 
     Installers.Add(service); 

     service.Committed += new InstallEventHandler(serviceInstaller_Committed); 
    } 

    void serviceInstaller_Committed(object sender, InstallEventArgs e) 
    { 
     ServiceController controller = new ServiceController(service.ServiceName); 
     controller.Start(); 
     controller.WaitForStatus(ServiceControllerStatus.Running); 
    } 
}