请问,通过CreateService函数创建的服务,在window的服务列表中已经可见,但是通过服务时启动总是报1053错误,服务不能启动,显示服务不能响应请求,代码如下:SC_HANDLE sc1, sc2; sc1 = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if(sc1==NULL)
{
//MessageBox("系统服务数据采集失败", "Error", MB_OK|MB_ICONWARNING);
OutputDebugString("系统服务数据采集失败");
return FALSE;
}
else
{
OutputDebugString("系统服务数据采集成功");
}
LPCTSTR lpszDisplayName = "PMC Service"; LPCTSTR lpszBinaryPathName = sFilePath; sc2 = CreateService(
sc1, // SCManager database
"PMC Service for SGM", // name of service
lpszDisplayName, // service name to display
SERVICE_ALL_ACCESS, // desired access
SERVICE_WIN32_OWN_PROCESS, // service type
SERVICE_AUTO_START, // start type
SERVICE_ERROR_NORMAL, // error control type
lpszBinaryPathName, // service's binary
NULL, // no load ordering group
NULL, // no tag identifier
NULL, // no dependencies
NULL, // LocalSystem account
NULL); // no password if (sc2 == NULL)
{
OutputDebugString("失败");
}
else
{
OutputDebugString("SUCCESS");
} CloseServiceHandle(sc2); return TRUE;
}是不是还有其他设置函数调用的问题,谢谢大家,在线等候
{
//MessageBox("系统服务数据采集失败", "Error", MB_OK|MB_ICONWARNING);
OutputDebugString("系统服务数据采集失败");
return FALSE;
}
else
{
OutputDebugString("系统服务数据采集成功");
}
LPCTSTR lpszDisplayName = "PMC Service"; LPCTSTR lpszBinaryPathName = sFilePath; sc2 = CreateService(
sc1, // SCManager database
"PMC Service for SGM", // name of service
lpszDisplayName, // service name to display
SERVICE_ALL_ACCESS, // desired access
SERVICE_WIN32_OWN_PROCESS, // service type
SERVICE_AUTO_START, // start type
SERVICE_ERROR_NORMAL, // error control type
lpszBinaryPathName, // service's binary
NULL, // no load ordering group
NULL, // no tag identifier
NULL, // no dependencies
NULL, // LocalSystem account
NULL); // no password if (sc2 == NULL)
{
OutputDebugString("失败");
}
else
{
OutputDebugString("SUCCESS");
} CloseServiceHandle(sc2); return TRUE;
}是不是还有其他设置函数调用的问题,谢谢大家,在线等候
{
SERVICE_TABLE_ENTRY ServiceTable[] =
{
{SERVERNAME,(LPSERVICE_MAIN_FUNCTION)ServiceMain},
{NULL,NULL}
};if(!StartServiceCtrlDispatcher(ServiceTable))
{
printf("RegisterServer First");
}
}
...
{
//进入服务的入口函数之后,必须马上调用RegisterServiceCtrlHandler()函数以得
//到svcStatusHandle,并向SCM报告当前服务的状态为SERVICE_START_PENDING,当服
//务初始化完成准备正常工作时,再向SCM报告SERVICE_RUNNING。
//设置服务的控制请求回调函数
svcStatusHandle = RegisterServiceCtrlHandler("BeepService",HandlerEx);
SendStatusToSCM(SERVICE_START_PENDING,NO_ERROR,0,0,1000); DWORD dwThreadId; //ServiceMain返回的时候就是服务结束的时候,所以对于在内存常驻的服务(不常驻,
//设计成服务也就没有意义了),不能立即返回,一个比较常用的方法是建立事件,然
//后调用WaitForSingleObject等待事件的触发。在收到SERVICE_CONTROL_STOP请求之
//后,调用SetEvent触发事件,ServiceMain返回,服务结束。
//通过这个事件来控制是否关闭服务
hEvent = CreateEvent(NULL,true,false,"{29174EF4-2E42-4EF6-95F9-A7D4101B8284}"); //建立实际的工作线程
hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)BeepThreadFunc,NULL,0,&dwThreadId); //通知SCM初始化完成
SendStatusToSCM(SERVICE_RUNNING,NO_ERROR,0,0,0); //当收到SERVICE_CONTROL_STOP控制请求时,触发这个事件,服务结束
WaitForSingleObject(hEvent,INFINITE);
}