2016-07-25 113 views
0

我已經在C#中創建了Windows窗體應用程序,並且在其上添加了一個Window服務。問題出在安裝後每次啓動服務時,我總是得到Error 1053 the service did not respond to the start or control request。但是,在創建新項目並選擇Windows服務並安裝並運行後,沒有錯誤,服務正常啓動。可以將Windows服務添加到現有項目中嗎?

那麼我必須爲Windows服務創建一個單獨的項目,否則我只是缺少一些東西?

我的目標框架是4.5.2,我計劃在Windows服務中使用UDP和TCP功能。

+0

「所以我必須爲Windows服務創建一個單獨的項目」*否*。 「或者我只是想念一些東西?」 *是* –

+0

有什麼我必須配置?你覺得缺少什麼?這是我第一次在Windows Service中工作。我學習如何創建基於教程的Windows服務基礎。我總是得到與Windows服務的教程,但沒有與Windows窗體應用程序的教程。 – Polar

+2

我不知道。我們將如何重現您的問題? –

回答

0

從Main()調用ServiceBase.Run()是使應用程序成爲服務而不是普通應用程序的原因。如果您使用Windows服務模板創建項目,但將ServiceBase.Run()的調用拿走,則結果將是普通應用程序而不是服務。 (可能是一個打破應用,但應用程序仍然。)

引擎蓋下,ServiceBase.Run()調用StartServiceCtrlDispatcher(),它調用內部ServiceBase.ServiceMainCallback()函數,它調用你的OnStart()函數。因此,如果您不調用Run(),則不會調用OnStart(),您的服務將不會執行任何操作。

StartServiceCtrlDispatcher()函數也間接負責調用OnStop()和所有其他相關方法。基本上,這是服務的核心,沒有它將無法正常工作。另外,當然,如果您不調用它,Windows最終會注意到控制調度程序尚未啓動,並假定該進程已掛起並將其終止。這就是1053錯誤的含義。

雖然它可能將服務和應用程序合併到一個可執行文件中,但讓它正常工作並不是微不足道的。這也是一種不常用的方法,不常用。除非你有一個令人信服的理由來避免這樣做,否則我建議你爲你的服務使用一個單獨的項目。

+0

所以,我需要創建2個項目?一個用於服務,另一個用於Windows窗體。真的建議當涉及到Windows服務創建一個單獨的項目,而不是將其添加到現有的Windows窗體應用程序? – Polar

+0

如果Windows服務在一個單獨的項目中,並且我在那裏有一些我想稍後調用的方法,我可以調用它嗎?恐怕如果不是,我有一些功能可以撥打我的服務。 – Polar

+0

您可以將常用功能移到庫中。 –

相關問題