StartServiceCtrlDispatcher 返回1063错误

Windows 服务程序一般创建为控制台程序,其主体代码结构如下:

void main(int argc, char* argv[])
{
     SERVICE_TABLE_ENtry servicetable[]=
    {
     {strServiceName,(LPSERVICE_MAIN_FUNCTION)ServiceMain},
     {NULL,NULL}
    };
 
    if( (StartServiceCtrlDispatcher(servicetable)) != success ) {
    // 這裡發生了 1063 的錯誤
    }
}
 
void ServiceMain(DWORD argc, LPTSTR *argv)
{
     BOOL success;
 
     //註冊 service handle function
     nServiceStatusHandle=RegisterServiceCtrlHandler(strServiceName,
     (LPHANDLER_FUNCTION)ServiceCtrlHandler);
     if(!nServiceStatusHandle)
     {
     return;
     }
 
     ...........
     ..........
     .........
}

当服务成功安装后再运行此程序,会在 StartServiceCtrlDispatcher 处返回 1063 错误,反复检查代码并在网上查询均找不到原因。其实代码是没有错误的,问题在于,服务安装成功以后就不需要你自行运行程序了,StartServiceCtrlDispatcher  函数应该是由 SCM (service controll manager) 来调用的。1063错误即是无法连接 service controller 的意思。