2011-11-15 34 views
0

我有一個服務,我開始&它工作正常(我通過查看它發佈的EventLog消息來驗證它正在運行)。出於某種原因,services.msc顯示停止按鈕變灰&我找不出原因。如何修復服務控制按鈕已禁用自定義服務

static SERVICE_STATUS_HANDLE gServiceStatusHandle = NULL; 

static DWORD WINAPI DaemonServiceHandler(DWORD control, DWORD eventType, LPVOID eventData, LPVOID context) 
{ 
    HANDLE stopEvent = reinterpret_cast<HANDLE>(context); 

    switch (control) { 
    case SERVICE_CONTROL_STOP: 
     ReportServiceStatus(SERVICE_STOP_PENDING, 100, 3000); 
     // notify main loop to stop 
     return NO_ERROR; 
    case SERVICE_CONTROL_INTERROGATE: 
     return NO_ERROR; 
    } 
    return ERROR_CALL_NOT_IMPLEMENTED; 
} 

void WINAPI DaemonMain(DWORD argc, LPWSTR *argv) 
{ 
    gServiceStatusHandle = RegisterServiceCtrlHandlerEx(WIN_UTF16(gServiceName), DaemonServiceHandler, NULL); 
    if (gServiceStatusHandle == NULL) { 
     ReportService(SERVICE_STOPPED); 
     return; 
    } 
    ReportService(SERVICE_RUNNING); 
    // do main loop 
    ReportService(SERVICE_STOPPED); 
} 

int tmain(int argc, tchar **argv) 
{ 
    const SERVICE_TABLE_ENTRYW DispatchTable[] = 
    { 
     {(L"MyService", DaemonMain}, 
     {NULL, NULL} 
    }; 
    if (!StartServiceCtrlDispatcherW(DispatchTable)) { 
     return 1; 
    } 
    return 0; 
} 
+0

這是大致我在做什麼的示例僞代碼 - 沒有測試它是否實際編譯。 – Vitali

回答

0

ReportServiceStatus調用中的錯誤。

我將SERVICE_STATUS_HANDLE的dwControlsAccepted設置爲0,而不是在要報告的當前狀態不是SERVICE_START_PENDING時啓用SERVICE_ACCEPT_STOP。