Delphi 服务程序[5] 描述、开启、停止、检索、状态
Delphi 服务程序[5] 描述、开启、停止、检索
1、服务程序中不能设定描述,可以通过以下方法设定:
uses
Registry;
procedure TSerTest.ServiceAfterInstall(Sender: TService);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create(KEY_READ or KEY_WRITE);
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('\SYSTEM\CurrentControlSet\Services\' + Name, false) then
begin
Reg.WriteString('Description', 'This is a description for my fine Service Application.');
Reg.CloseKey;
end;
finally
Reg.Free;
end;
end;
2、开启、停止、检索、状态
uses Windows,Messages,SysUtils,Winsvc,Dialogs;
//开启服务
function StartServices(Const SvrName: String): Boolean;
var
sMgr, sHandle:SC_HANDLE;
c:PChar;
begin
Result:=False;
sMgr := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if sMgr <=0 then Exit;
sHandle := OpenService(sMgr, PChar(SvrName), SERVICE_ALL_ACCESS);
if sHandle <=0 then Exit;
try
Result:=StartService(sHandle, 0, c);
CloseServiceHandle(sHandle);
CloseServiceHandle(sMgr);
except
CloseServiceHandle(sHandle);
CloseServiceHandle(sMgr);
end;
end;
//停止服务
function StopServices(Const SvrName: String): Boolean;
var
sMgr, sHandle: SC_HANDLE;
d: TServiceStatus;
begin
Result := False;
sMgr := OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
if sMgr <=0 then Exit;
sHandle := OpenService(sMgr,PChar(SvrName),SERVICE_ALL_ACCESS);
if sHandle <=0 then Exit;
try
Result:=ControlService(sHandle, SERVICE_CONTROL_STOP,d);
CloseServiceHandle(sMgr);
CloseServiceHandle(sHandle);
except
CloseServiceHandle(sMgr);
CloseServiceHandle(sHandle);
end;
end;
//查询当前服务的状态
function QueryServiceStatu(Const SvrName: String): String;
var
sMgr, sHandle: SC_HANDLE;
d: TServiceStatus;
begin
Result := '未安装';
sMgr := OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
if sMgr <=0 then Exit;
sHandle := OpenService(sMgr,PChar(SvrName),SERVICE_ALL_ACCESS);
if sHandle <= 0 then Exit;
try
QueryServiceStatus(sHandle, d);
if d.dwCurrentState = SERVICE_RUNNING then
Result := '启动' //Run
else if d.dwCurrentState = SERVICE_RUNNING then
Result := 'Wait' //Runing
else if d.dwCurrentState = SERVICE_START_PENDING then
Result := 'Wait' //Pause
else if d.dwCurrentState = SERVICE_STOP_PENDING then
Result := '停止' //Pause
else if d.dwCurrentState = SERVICE_PAUSED then
Result := '暂停' //Pause
else if d.dwCurrentState = SERVICE_STOPPED then
Result := '停止' //Stop
else if d.dwCurrentState = SERVICE_CONTINUE_PENDING then
Result := 'Wait' //Pause
else if d.dwCurrentState = SERVICE_PAUSE_PENDING then
Result := 'Wait'; //Pause
CloseServiceHandle(sMgr);
CloseServiceHandle(sHandle);
except
CloseServiceHandle(sMgr);
CloseServiceHandle(sHandle);
end;
end;
function IsServiceExisted(Const SvrName: String):Boolean;
var
sMgr, sHandle:SC_HANDLE;
begin
Result:=False;
sMgr := OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
if sMgr <= 0 then Exit;
sHandle :=OpenService(sMgr, PChar(SvrName), STANDARD_RIGHTS_REQUIRED);
if sHandle > 0 then
Result := True;
end;
创建时间:2021.01.21 更新时间:
博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你有所帮助,谢谢!