首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

最近在写一个Windows服务程序,主进程调用StartServiceCtrlDispatcher(dispatchTable),显示1053异常

2013-11-02 
最近在写一个Windows服务程序,主进程调用StartServiceCtrlDispatcher(dispatchTable),显示1053错误下边是

最近在写一个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是启动错,看看你的启动方式,注册服务有没有成功什么的,跟一下。

热点排行