发个帖:createservice创建的服务无法启动,有经验的大神指教下

该用户很帅 2013-04-27 05:38:24
需求:一个普通的EXE 添加服务功能 createservice后
别说程序启动,就是在本地服务里手工启动服务也失败,如下
问题错误:无法启动服务 1053服务没有及时响应启动或控制请求
先上代码:

procedure TForm1.Button1Click(Sender: TObject);
begin
CreateServices('stest',Application.exename);
end;


function CreateServices(Const SvrName,FilePath:String):Boolean;
var
Svc,Service:SC_HANDLE;
begin
Result:=False;
if FilePath ='' then Exit;
Svc := OpenSCManager(nil,nil,SC_MANAGER_CREATE_SERVICE); {连接服务数据库,参数:1,机器名,打开本机SCM用nil;2,
打开SCM数据库;3,访问权限}
if Svc<= 0 then
begin
showmessage(syserrormessage(getlasterror));
CloseServiceHandle(Svc);
Exit;
end;

try
Service := CreateService(Svc,PChar(SvrName), //服务控制句柄,指向服务器内部名称
PChar(SvrName), //显示服务名称
SERVICE_ALL_ACCESS, // 服务的访问类型
SERVICE_INTERACTIVE_PROCESS or SERVICE_WIN32_OWN_PROCESS, // 服务类型
SERVICE_AUTO_START,SERVICE_ERROR_NORMAL, //启动类型 错误控制类型
PChar(FilePath),nil,nil,nil,nil,nil); // 服务程序路径,组服务名称,组标识,依赖的服务,启动服务帐号,启动服务口令
if Service <= 0 then
begin
ShowMessage(SysErrorMessage(GetlastError));
Exit;
end;
CloseServiceHandle(Service);
CloseServiceHandle(Svc);
Result:=True;
except
CloseServiceHandle(Service);
CloseServiceHandle(Svc);
Exit;
end;
end;


不知道错在哪里,望大神们指点
...全文
684 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
ysai 2013-05-09
  • 打赏
  • 举报
回复
SvcMgr单元里的application对象已经实现了注册/启动/暂停/停止/卸载相关的功能,你新建一个service application就能实现了 我给的示例是可以让一个exe即支持service形式,也支持普通app形式启动的
该用户很帅 2013-05-02
  • 打赏
  • 举报
回复
引用 18 楼 truexf 的回复:
服务程序的代码没贴出来这个只是创建服务,你都创建成功了。都可以看到这个服务了。 而服务不能起来是你服务程序本身决定的,检查你RegisterServiceCtrlHandler注册的函数有没有正确处理外部命令?
大神,还要注册啊,这。。真心不懂啊,delphi有没有这方面的例子,请多指教
sololie 2013-04-28
  • 打赏
  • 举报
回复
用service模板创建的服务注册启动都很正常,你还是直接 file-new-other-service application来创建一个服务吧,在属性面板中设置服务各项内容,yourSvr.exe -install 来安装服务
该用户很帅 2013-04-28
  • 打赏
  • 举报
回复
引用 14 楼 ysai 的回复:
服务和普通app是有区别的,服务需要注册,服务的Application和普通窗口应用的Application不是同一个对象 下面的例子,如果带有-ui参数,则以非服务启动,否则就是服务程序 program DemoServer; uses SysUtils, SvcMgr, Forms, SvcUIFrm in 'SvcUIFrm.pas', DBSvcFrm in 'DBSvcFrm.pas'; begin if FindCmdLineSwitch('ui') then begin Forms.Application.Initialize; Forms.Application.MainFormOnTaskbar := True; Forms.Application.CreateForm(TSvcUIForm, SvcUIForm); Forms.Application.Run; end else begin if not SvcMgr.Application.DelayInitialize or SvcMgr.Application.Installing then SvcMgr.Application.Initialize; SvcMgr.Application.CreateForm(TDBSvc, DBSvc); SvcMgr.Application.Run; end; end.
那请问大神你的“ui”参数是什么时候写进去的,如何写进去?用winexec?
ysai 2013-04-28
  • 打赏
  • 举报
回复
服务和普通app是有区别的,服务需要注册,服务的Application和普通窗口应用的Application不是同一个对象 下面的例子,如果带有-ui参数,则以非服务启动,否则就是服务程序 program DemoServer; uses SysUtils, SvcMgr, Forms, SvcUIFrm in 'SvcUIFrm.pas', DBSvcFrm in 'DBSvcFrm.pas'; begin if FindCmdLineSwitch('ui') then begin Forms.Application.Initialize; Forms.Application.MainFormOnTaskbar := True; Forms.Application.CreateForm(TSvcUIForm, SvcUIForm); Forms.Application.Run; end else begin if not SvcMgr.Application.DelayInitialize or SvcMgr.Application.Installing then SvcMgr.Application.Initialize; SvcMgr.Application.CreateForm(TDBSvc, DBSvc); SvcMgr.Application.Run; end; end.
该用户很帅 2013-04-28
  • 打赏
  • 举报
回复
我想知道createservice创建的服务到底错在哪里?为什么启动不了?
该用户很帅 2013-04-28
  • 打赏
  • 举报
回复
引用 11 楼 sololie 的回复:
用service模板创建的服务注册启动都很正常,你还是直接 file-new-other-service application来创建一个服务吧,在属性面板中设置服务各项内容,yourSvr.exe -install 来安装服务
大神这么晚还在啊 身体要紧哦 另:用模块来做有点达不到我的要求(不灵活),或许我对service模块理解有限,我要效果的是:在一个普通的exe 中有一个勾选服务模式选项(如果选上,普通的exe则变成服务程序,取消则变成普通模式)
「已注销」 2013-04-28
  • 打赏
  • 举报
回复
服务程序的代码没贴出来这个只是创建服务,你都创建成功了。都可以看到这个服务了。 而服务不能起来是你服务程序本身决定的,检查你RegisterServiceCtrlHandler注册的函数有没有正确处理外部命令?
sololie 2013-04-28
  • 打赏
  • 举报
回复
LS达人来了 用winexec或创建个bat执行也都可以,反正方法多多 另外注意如果如果以服务模式运行,SvcMgr.Application没有exename了
ysai 2013-04-28
  • 打赏
  • 举报
回复
你建个快捷方式加上参数不就行了吗
该用户很帅 2013-04-27
  • 打赏
  • 举报
回复
引用 8 楼 sololie 的回复:
吃了饭再看看
多谢
该用户很帅 2013-04-27
  • 打赏
  • 举报
回复
引用 7 楼 sololie 的回复:
无法启动服务 1053服务没有及时响应启动或控制请求 问题参考 http://bbs.kafan.cn/thread-1371741-1-1.html http://blog.sina.com.cn/s/blog_78d6d8bb0100rwx9.html
看的有点晕
sololie 2013-04-27
  • 打赏
  • 举报
回复
吃了饭再看看
sololie 2013-04-27
  • 打赏
  • 举报
回复


无法启动服务 1053服务没有及时响应启动或控制请求 问题参考
http://bbs.kafan.cn/thread-1371741-1-1.html
http://blog.sina.com.cn/s/blog_78d6d8bb0100rwx9.html
该用户很帅 2013-04-27
  • 打赏
  • 举报
回复
引用 4 楼 sololie 的回复:
在我机器上测试服务安装成功
你手动启动服务试试 ,是不是error
该用户很帅 2013-04-27
  • 打赏
  • 举报
回复
从C++里面翻译过来的,不知道哪里漏了? 还是创建的这个服务无法启动一个普通的exe(好像没有理由吧)?
sololie 2013-04-27
  • 打赏
  • 举报
回复
在我机器上测试服务安装成功
该用户很帅 2013-04-27
  • 打赏
  • 举报
回复
引用 2 楼 sololie 的回复:
撸过围观 不过,Application.exename 是啥玩意
本身TForm1这个的Exe(也就是说一个普通的.exe)
sololie 2013-04-27
  • 打赏
  • 举报
回复
撸过围观 不过,Application.exename 是啥玩意
该用户很帅 2013-04-27
  • 打赏
  • 举报
回复
顶起啊

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧