2011-06-03 365 views
7

我有一個基本的C#控制檯應用程序,我想作爲Windows服務運行。將C#控制檯應用程序作爲Windows服務運行

我使用sc create創建了Windows服務。這工作得很好,我可以看到我的服務在services.msc。當我試着開始這項服務,我得到以下錯誤:

Could not start the PROJECT service on Local Computer. Error 1053: The service did not respond to the start or control request in a timely fashion.`

我看,這可能是由於服用時間超過30000  毫秒執行服務代碼。因此,我刪除了大部分的代碼,幾乎沒有任何東西正在執行..但同樣的錯誤仍然存​​在。

我在這個項目中使用.NET 3.5。

這會導致什麼?

+0

你的過程是否真正開始?我懷疑這是開始失敗, – zdan 2011-06-03 01:16:02

+0

http://stackoverflow.com/questions/593454/easiest-language-for-creating-a-windows-service/593803#593803 – 2011-06-03 07:38:21

回答

9

您不能只取任何控制檯應用程序並作爲Windows服務運行。首先,您需要實施可繼承ServiceBase的服務類,然後在入口點(Main),您需要使用ServiceBase.Run(new YourService())運行服務。在你的服務類中,你需要定義服務開始和結束時會發生什麼。

理想情況下,您應該將ServiceInstaller添加到您的程序集中。這樣您就可以預設服務屬性,並使用installutil.exe來安裝服務。

+0

這是爲什麼呢? – wulfgarpro 2011-06-03 01:13:39

+1

@WulfgarPro - 因爲windows服務應用程序有一點不同的體系結構。您需要定義在服務開始和結束時要執行的操作。 – 2011-06-03 01:15:47

+2

有一些工具可以讓你在不修改的情況下作爲服務運行控制檯應用程序。例如下面這個:http://runasservice.com – 2013-09-25 02:17:33

0

我不知道「sc創建」是什麼。但我知道,使用Visual Studio 2010,可以構建Windows服務項目。順便說一下,我創建了這樣一個項目,並且它一直工作得很好。

+0

'sc create'就是你如何安裝windows服務,即使你的程序集裏面沒有安裝程序。 – 2011-06-03 03:33:22

0

沒有任何舊的應用程序可以作爲服務運行,特別是在更新版本的Windows下。他們預計會支持某些功能,響應某些請求,並且(再次,在最新版本的Windows下)而不是直接與用戶交互。

如果您想要服務,請編寫專門設計爲服務的應用程序。

0

why is this so? – wulfgar.pro Jun 3 '11 at 1:13

@WulfgarPro - because windows service application has a little different architecture. You need to define what to do when service starts and ends. – Alex Aza Jun 3 '11 at 1:15

(可惜我不能寫一個評論。) 這是因爲SCM(服務控制管理器)控制的保養槽ServiceBase類。如果只需要定義它在啓動和停止時的功能,就不需要繼承和重寫。人們可以簡單地創建這兩種方法。不幸的是,由於ServiceBase包含了更多的功能,所以需要更多的工作。

0

我已經與TopShelf取得了巨大成功。這是一個nuget包,它允許.NET控制檯應用程序也具有必要的Windows服務掛鉤,以便它可以作爲控制檯應用程序(用於調試)很高興地運行,或者作爲Windows服務安裝。

相關問題