最近在写一个Windows服务程序,主进程调用StartServiceCtrlDispatcher(dispatchTable),显示1053错误
下边是代码,各位帮我看看,纠结了好几天了!
int _tmain(int argc, _TCHAR* argv[])
{
SERVICE_TABLE_ENTRY dispatchTable[]=
{
{TEXT(SZSERVICENAME),(LPSERVICE_MAIN_FUNCTION)Service_Main},
{NULL,NULL}
};
//StartServiceCtrlDispatcher(dispatchTable);
if((argc==2)&&(*argv[1]=='-'))
{
if(_tcscmp(_T("install"),argv[1]+1)==0)
{
installService();
}
else if(_tcscmp(_T("remove"),argv[1]+1)==0)
{
removeService();
}
else if(_tcscmp(_T("debug"),argv[1]+1)==0)
{
//bDebugServer=true;
//debugService(argc,(char**)argv);
}
else
{//如果未能和上面的如何参数匹配,则可能是服务控制管理程序来启动该程序。立即调用
//StartServiceCtrlDispatcher 函数。
printf("%s - install to install the service \n",SZAPPNAME);
printf("%s - remove to remove the service \n",SZAPPNAME);
printf("%s - debug to debug the service \n",SZAPPNAME);
printf("\n StartServiceCtrlDispatcher being called.\n");
printf("This may take several seconds.Please wait.\n");
bool ret=StartServiceCtrlDispatcher(dispatchTable);
if(!ret)
AddToMessageLog(TEXT("StartServiceCtrlDispatcher failed."));
else
AddToMessageLog(TEXT("StartServiceCtrlDispatcher OK."));
}
exit(0);
}
return 0;
}
//服务入口点函数
void WINAPI Service_Main(DWORD dwArgc, LPTSTR *lpszArgv)
{
//初始化 SERVICE_STATUS 结构中的成员
ssStatus.dwServiceType=SERVICE_WIN32_OWN_PROCESS;
ssStatus.dwControlsAccepted=SERVICE_ACCEPT_STOP;
ssStatus.dwCurrentState= SERVICE_START_PENDING;
ssStatus.dwServiceSpecificExitCode=0;
ssStatus.dwCheckPoint=0;
ssStatus.dwWin32ExitCode=0;
ssStatus.dwWaitHint=0;
//注册服务控制处理函数
sshStatusHandle=RegisterServiceCtrlHandler(TEXT(SZSERVICENAME),Service_Ctrl);
//如果注册失败
if(!sshStatusHandle)
{
goto cleanup;
return;
}
//更新服务状态
if(!ReportStatusToSCMgr(
SERVICE_RUNNING,//服务状态,The service is starting.
NO_ERROR, //退出码
3000)) //等待时间
goto cleanup; //更新服务状态失败则转向 cleanup
ServiceStart(dwArgc,lpszArgv);//具体的服务程序
return;
cleanup:
//把服务状态更新为 SERVICE_STOPPED,并退出。
if(sshStatusHandle)
(void)ReportStatusToSCMgr(SERVICE_STOPPED,dwErr,0);
}
哪里错了……
[解决办法]
1053是启动错,看看你的启动方式,注册服务有没有成功什么的,跟一下。