2010-08-27 66 views
3

我在win32,C++中創建了一個服務。我能夠創建該服務,但是當我嘗試啓動它時,會出現以下錯誤。該服務沒有及時響應啓動或控制請求

[SC] StartService失敗1053: 服務沒有及時響應啓動或控制請求。

什麼是去的根本原因,因爲該錯誤信息不會傳達任何有意義

+0

我敢打賭,你就無法正常啓動的服務控制調度程序,但你的文章是太模糊,沒有人有水晶球心理上調試您的問題給你。 – 2012-11-30 03:29:14

+0

與安裝組件的c#空服務相同的問題。啓動時只是這個模糊的錯誤。保護覆蓋無效OnStart(字符串[]參數) {}是空的,所以沒有別的可能會失敗。 WTF – FlavorScape 2013-07-26 00:17:37

回答

0

得到根本原因是檢查SERVICE_STATUS_PROCESS.dwCheckPoint價值的最佳方式的最佳途徑。當服務處於START_PENDING狀態時,您的服務正在進行更新,您可以通過命令行輪詢服務sc query

1

請注意,如果您在啓動服務時執行長時間操作,則錯誤可能是由此引起的。 SC等待30秒以完成啓動操作,然後報告失敗。

3

調試服務很難。現在我更喜歡編寫一個完成所有工作的類庫,一個調用類庫的一個方法的服務,以及一個調用相同方法的測試工具(通常是控制檯應用程序)。這樣我就可以在調試器中運行測試工具,並避免大部分錯誤。

你容易當你的服務將無法啓動這兩個消息是你剛剛得到了一個和「它開始,但隨後停止」之一,這通常意味着它引發了異常。如果你正在寫一個「醒來,看看它是否是午夜」的服務,你的通常意味着一個糟糕的循環或過長的睡眠。但是,真正的,通過測試工具在調試器下運行它是瞭解發生情況的最佳方法。

+0

我很想......但是我的服務沒有做任何事情,它仍然會出現這個錯誤。 – FlavorScape 2013-07-26 00:13:24

3

這篇文章是很久以前的,但我正在寫這爲未來的程序員誰會尋找一種方法來解決。

我有同樣的問題,花了幾個小時找出問題所在。

至少在我的情況下,解決方案非常簡單,讓我覺得有點愚蠢。

當通過SERVICE_TABLE_ENTRY傳遞給StartServiceCtrlDispatcherW的主函數在嘗試運行服務後立即返回時,可能會導致錯誤消息「服務沒有....」。

SC運行的主要功能不應該返回,除非SC告訴它停止。

的代碼將如下所示:

void CServiceManager::Start(DWORD _dwArgc, LPWSTR * _argv) 
{ 
    // Your performing code. 
    // .... 

    ::SetServiceStatus(SERVICE_RUNNING); // Roughly 

    // Prevent CServiceManager::Start from returning. 
    ::WaitForSingleObject(YourExitEvent, 0); 
} 

你也不要忘記通過SERVICE_STOPPPED和退出代碼調用SetEvent的。

希望這會幫助別人。

相關問題