在winxp下显示启动服务,错误1053 服务未及时响应启动或控制请求,在win2000上没有问题,up有分.

时间:2021-07-24 17:42:18
我用atl生成一个服务程序框加,在run里启动一个线程,线程启动socket听一个端口,在win2000上运行是正常的,但在xp里面,我有sc注册并启动,可以不能启动,手工启动也不行,出现一个错误---->错误1053 服务未及时响应启动或控制请求,请高手帮忙为谢。

12 个解决方案

#1


UP先

#2


up

#3


我又测试过了,用atl生成一个空的服务框架,什么也不做(不添加任何代码),然后就编译,在xp下启动还是出现1053错误,大家帮帮我啊!!!!

谢谢mymyal123的UP

#4


不会吧?没有做过,你用windows console application自己写一个服务看看?不用atl的。

#5


api写,多麻烦啊,再说atl会有什么错呢,只是在winxp下有错误哦,在2k上又没什么问题。

#6


看不出来毛病,在服务程序的各个地方输出调试信息到log文件,看看问题具体出在什么地方。

#7


跟登陆用户有关吗?
to:hyamw ATL做的框架,没加什么代码,会跟什么有关系?难道是编译环竟有关?

#8


发现了一个问题,注册没有正确,我在win2000中把其中一个与该服务相关的注册表信息导出,然后在xp里导入,就可以正常启动了,可是socket收不到什么通信,不知为何。

如何注册服务呢?请给正解...
我是如下注册和启动的。
bat文件内容

sc create myserver binpath= c:\windows\Sc\myserver.exe
sc config myservers tart= auto
sc start myserver

请问有什么不足吗?

#9


服务的API就那么几个 很简单

bool SvcIns() 
{
SC_HANDLE hSC = OpenSCManager(NULL, NULL, GENERIC_WRITE);
UINT nCode = 0;   

if (! hSC)
{
switch (GetLastError())
{
case ERROR_ACCESS_DENIED:
nCode = 2;
break;
case ERROR_DATABASE_DOES_NOT_EXIST:
nCode = 3;
break;
case ERROR_INVALID_PARAMETER:
nCode = 4;
}
return false;
}
 
SC_HANDLE hSRV = CreateService(hSC,
_T("Svc_Name"),//服务名
_T("Svc_Display_Name"),//服务的友好名字
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_IGNORE,
_T("C:\\svc.exe"),
NULL,
NULL,
NULL,
NULL,
NULL);

if (! hSRV)
{
switch (GetLastError())
{
case ERROR_ACCESS_DENIED:
nCode = 6;
break;
case ERROR_CIRCULAR_DEPENDENCY: //8
nCode = 8;
break;
case ERROR_DUP_NAME:
nCode = 9;
break;
case ERROR_INVALID_HANDLE:
nCode = 10;
break;
case ERROR_INVALID_NAME:
nCode = 11;
break;
case ERROR_INVALID_PARAMETER:
nCode = 12;
break;
case ERROR_INVALID_SERVICE_ACCOUNT:
nCode = 13;
break;
case ERROR_SERVICE_EXISTS:
nCode = 14;
default:
nCode = 24;
}
return false;
}
else 
{
if (! StartService(hSRV, 0, NULL))
{
puts("Error to start service");
}
CloseServiceHandle(hSRV);
}

CloseServiceHandle( hSC );

return (0 == nCode);
}

#10


ATL的service服务程序自己就带注册功能
XXX.exe -Service
看看下面这篇文章:
http://www.vckbase.com/document/viewdoc/?id=1176
socket通讯不成功,你得看看socket创建是否成功了。

#11


谢谢大家,已经成功。

但是注册还是不行,只能用导入注册表的方法。我会再检查的。

给分了。

#12


注册怎么不行 返回代码是多少 我的是可以注册的 把你的代码贴出来看看

#1


UP先

#2


up

#3


我又测试过了,用atl生成一个空的服务框架,什么也不做(不添加任何代码),然后就编译,在xp下启动还是出现1053错误,大家帮帮我啊!!!!

谢谢mymyal123的UP

#4


不会吧?没有做过,你用windows console application自己写一个服务看看?不用atl的。

#5


api写,多麻烦啊,再说atl会有什么错呢,只是在winxp下有错误哦,在2k上又没什么问题。

#6


看不出来毛病,在服务程序的各个地方输出调试信息到log文件,看看问题具体出在什么地方。

#7


跟登陆用户有关吗?
to:hyamw ATL做的框架,没加什么代码,会跟什么有关系?难道是编译环竟有关?

#8


发现了一个问题,注册没有正确,我在win2000中把其中一个与该服务相关的注册表信息导出,然后在xp里导入,就可以正常启动了,可是socket收不到什么通信,不知为何。

如何注册服务呢?请给正解...
我是如下注册和启动的。
bat文件内容

sc create myserver binpath= c:\windows\Sc\myserver.exe
sc config myservers tart= auto
sc start myserver

请问有什么不足吗?

#9


服务的API就那么几个 很简单

bool SvcIns() 
{
SC_HANDLE hSC = OpenSCManager(NULL, NULL, GENERIC_WRITE);
UINT nCode = 0;   

if (! hSC)
{
switch (GetLastError())
{
case ERROR_ACCESS_DENIED:
nCode = 2;
break;
case ERROR_DATABASE_DOES_NOT_EXIST:
nCode = 3;
break;
case ERROR_INVALID_PARAMETER:
nCode = 4;
}
return false;
}
 
SC_HANDLE hSRV = CreateService(hSC,
_T("Svc_Name"),//服务名
_T("Svc_Display_Name"),//服务的友好名字
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_IGNORE,
_T("C:\\svc.exe"),
NULL,
NULL,
NULL,
NULL,
NULL);

if (! hSRV)
{
switch (GetLastError())
{
case ERROR_ACCESS_DENIED:
nCode = 6;
break;
case ERROR_CIRCULAR_DEPENDENCY: //8
nCode = 8;
break;
case ERROR_DUP_NAME:
nCode = 9;
break;
case ERROR_INVALID_HANDLE:
nCode = 10;
break;
case ERROR_INVALID_NAME:
nCode = 11;
break;
case ERROR_INVALID_PARAMETER:
nCode = 12;
break;
case ERROR_INVALID_SERVICE_ACCOUNT:
nCode = 13;
break;
case ERROR_SERVICE_EXISTS:
nCode = 14;
default:
nCode = 24;
}
return false;
}
else 
{
if (! StartService(hSRV, 0, NULL))
{
puts("Error to start service");
}
CloseServiceHandle(hSRV);
}

CloseServiceHandle( hSC );

return (0 == nCode);
}

#10


ATL的service服务程序自己就带注册功能
XXX.exe -Service
看看下面这篇文章:
http://www.vckbase.com/document/viewdoc/?id=1176
socket通讯不成功,你得看看socket创建是否成功了。

#11


谢谢大家,已经成功。

但是注册还是不行,只能用导入注册表的方法。我会再检查的。

给分了。

#12


注册怎么不行 返回代码是多少 我的是可以注册的 把你的代码贴出来看看