我在:
Delphi2007 ver11.0.2902.10471
windows2003
下做了一个服务程序 A.exe
然后我又另写一个安装程序对这个服务进行安装.我发现:
如果用 winexec(pchar('a.exe /install'),sw_hide) 能安装服务,但使用
scm := OpenSCManager( Nil, Nil,SC_MANAGER_ALL_ACCESS);// SC_MANAGER_CONNECT );
svc := OpenService( scm, PChar(aServiceName ), SERVICE_ALL_ACCESS );
来检测这个服务时,scv值为0,表示没有这个服务存在.(其时在WINDOWS的服务列表中能看到A这个服务存在)
用手工在WINDOS的服务管理列表中手工启动这个服务,服务运行正常.如果用
CreateService(hSCM,PChar(ServiceName),PChar(DisplayName),
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START, SERVICE_ERROR_IGNORE,
PChar(sFileName), nil, nil, nil, nil, nil);
来安装程序,能安装上并且svc检查到,但是启动后发现服务程序没有反应.请问这是什么原因?
解决方案 »
- EXP workflow 是那个公司出的工作流调度系统(顶者有分)
- 跪求,在线等,一个关于WISE打包写环境变量的问题.很急
- 插入 JPG 文件时报错,求救...
- 关于打印的问题
- 求模块。详细信息进来看看。拿到模块后再加50分!
- 在SQLServer中decimal可以定义最大的精度38位, Delphi有没有与之对应的数据类型(float最大的小数位数为15, 不够啊) ?
- 怎么把一个数据表里的image字段内容赋到另一个表 的image字段,谢谢了,
- 谁能搞到这个软件的源码?或用DELPHI写段实现其主要功能的代码...................!
- delphi中如何实现一个日期到另一个日期还有多少天?
- a = (a + 1)
- 报表(fastreport4)设计时的显示问题
- 怎样使鼠标指针透明度降为1假设不透明为255?
声明:
schService :SC_HANDLE;
schSCManager :SC_HANDLE;
ServiceStatus:TServiceStatus; 调用api:
schSCManager := OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
schService := OpenService(schSCManager,'ser',SERVICE_ALL_ACCESS); QueryServiceStatus(schService,ServiceStatus);
if ServiceStatus.dwCurrentState = SERVICE_RUNNING then 运行
else
没有运行
end;
Var
scm : Cardinal;
svc : Cardinal;
sts : _SERVICE_STATUS;
arg : PChar;
begin
Result := true;
// If ( ( GetVersion AND $80000000 ) = 0 ) Then // Is NT/2000
// Begin
scm := OpenSCManager( Nil, Nil,SC_MANAGER_ALL_ACCESS);// SC_MANAGER_CONNECT );
svc := OpenService( scm, PChar(aServiceName ), SERVICE_ALL_ACCESS );
ServerExist:=Svc<>0;
If ( svc <> 0 ) Then // *****这里是检查服务是否存在*****
Begin
QueryServiceStatus( svc, sts ); // *****这里就是检查服务的状态*****
ServerStart:=sts.dwCurrentState= SERVICE_RUNNING; If ( ( ( aOp = 0 ) AND ( sts.dwCurrentState <> SERVICE_STOPPED ) )
OR ( ( aOp = 1 ) AND ( sts.dwCurrentState <> SERVICE_RUNNING ) ) ) Then
Begin
arg := Nil; If ( aOp = 0 ) Then // Stop
Result := ControlService( svc, SERVICE_CONTROL_STOP, sts )
Else
Result := StartService( svc, 0, arg );
End;
CloseServiceHandle( svc );
End;
CloseServiceHandle( scm );
End;
以上是我的检测程序代码段.如果是用createServer函数安装的能被检查被启动,但用 winexec(pchar('a.exe /install',sw_hide)安装的就不能被检查到,