2011-11-15 10 views
0

私は&というサービスを起動しています(それが動作していることを確認しています)。しかし何らかの理由で、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_START_PENDINGでない場合、SERVICE_ACCEPT_STOPを有効にする代わりに、SERVICE_STATUS_HANDLEのdwControlsAcceptedを常に0に設定していました。