请问,通过CreateService函数创建的服务,在window的服务列表中已经可见,但是通过服务时启动总是报1053错误,服务不能启动

baoch110 2005-02-25 10:39:21
请问,通过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;
}

是不是还有其他设置函数调用的问题,谢谢大家,在线等候
...全文
402 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
BigFanOfCpp 2005-02-26
我觉得还是看看MSDN吧,自己印象深刻.
回复
tankbattle 2005-02-26
系统服务和一般的应用程序流程是不太一样的,你可以看看msdn下“platform sdk\windows base services\exectuables\services”那里有编写系统服务的详细说明。
回复
blastzgd 2005-02-26
看看你注册的服务控制处理程序代码
回复
Kudeet 2005-02-25
应该是服务程序的问题,参考

VOID WINAPI BeepServiceMain(DWORD dwArgc,LPTSTR *lpszArgv)
{
//进入服务的入口函数之后,必须马上调用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);
}
回复
EnochShen 2005-02-25
ERROR_SERVICE_REQUEST_TIMEOUT 服务器没有及时的响应启动或控制请求

看看你的EXE是不是写的不对

是不是这样写的?不是的话改一下

void main(int argc, char* argv[])
{
SERVICE_TABLE_ENTRY ServiceTable[] =
{
{SERVERNAME,(LPSERVICE_MAIN_FUNCTION)ServiceMain},
{NULL,NULL}
};

if(!StartServiceCtrlDispatcher(ServiceTable))
{
printf("RegisterServer First");
}
}
...

回复
EnochShen 2005-02-25
http://community.csdn.net/Expert/topic/3796/3796103.xml?temp=.5779077

参考我得恢复
回复
相关推荐
发帖
进程/线程/DLL
创建于2007-09-28

1.5w+

社区成员

VC/MFC 进程/线程/DLL
申请成为版主
帖子事件
创建了帖子
2005-02-25 10:39
社区公告
暂无公告