读书人

最近在写一个Windows服务程序主进程

发布时间: 2013-11-02 19:41:10 作者: rapoo

最近在写一个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);

}
哪里错了……
[解决办法]
引用:
下边是代码,各位帮我看看,纠结了好几天了!
C/C++ code?1
int _tmain(int argc, _TCHAR* argv[])
{
SERVICE_TABLE_ENTRY dispatchTable[]=
{

{TEXT(SZSERVICENAME),(LPSERVICE_MAIN_FUNCTIO……


1053是启动错,看看你的启动方式,注册服务有没有成功什么的,跟一下。

读书人网 >C++

热点推荐