Delphi 下操作Windows 服务的代码
来源:互联网 发布:釜山行影评知乎 编辑:程序博客网 时间:2024/05/05 02:40
Delphi下操作Windows Servie需要调用API函数,主要封装在 SvcMgr 和 WinSvc单元中,最近写了一个通用库,希望对大家有所帮助
Function ServiceIsRunning()function ServiceIsRunning(ServiceName: string): Boolean;
var
SCManager: THandle;
HService: THandle;
ServiceStatus: TServiceStatus;
begin
Result := false;
if HInst = 0 then
Exit;
SCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if SCManager <> 0 then
begin
HService := OpenService(SCManager, PChar(ServiceName), GENERIC_READ);
if HService <> 0 then
begin
if ControlService(HService, SERVICE_CONTROL_INTERROGATE, ServiceStatus) then
begin
// If QueryServiceStatus(hService, ServiceStatus) Then Begin
if ServiceStatus.dwCurrentState = SERVICE_RUNNING then
begin
Result := true;
end;
end;
CloseServiceHandle(HService);
end;
CloseServiceHandle(SCManager);
end;
end;
var
SCManager: THandle;
HService: THandle;
ServiceStatus: TServiceStatus;
begin
Result := false;
if HInst = 0 then
Exit;
SCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if SCManager <> 0 then
begin
HService := OpenService(SCManager, PChar(ServiceName), GENERIC_READ);
if HService <> 0 then
begin
if ControlService(HService, SERVICE_CONTROL_INTERROGATE, ServiceStatus) then
begin
// If QueryServiceStatus(hService, ServiceStatus) Then Begin
if ServiceStatus.dwCurrentState = SERVICE_RUNNING then
begin
Result := true;
end;
end;
CloseServiceHandle(HService);
end;
CloseServiceHandle(SCManager);
end;
end;
Function StopService()function StopService(ServiceName: string): Boolean;
var
SCManager: THandle;
HService: THandle;
ServiceStatus: TServiceStatus;
begin
Result := false;
if HInst = 0 then
Exit;
SCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if SCManager <> 0 then
begin
HService := OpenService(SCManager, PChar(ServiceName), SERVICE_ALL_ACCESS);
if HService <> 0 then
begin
if QueryServiceStatus(hService, ServiceStatus) then
begin
if ServiceStatus.dwCurrentState = SERVICE_RUNNING then
begin
Result := ControlService(hService, SERVICE_CONTROL_STOP, ServiceStatus);
end;
end;
CloseServiceHandle(HService);
end;
CloseServiceHandle(SCManager);
end;
end;
var
SCManager: THandle;
HService: THandle;
ServiceStatus: TServiceStatus;
begin
Result := false;
if HInst = 0 then
Exit;
SCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if SCManager <> 0 then
begin
HService := OpenService(SCManager, PChar(ServiceName), SERVICE_ALL_ACCESS);
if HService <> 0 then
begin
if QueryServiceStatus(hService, ServiceStatus) then
begin
if ServiceStatus.dwCurrentState = SERVICE_RUNNING then
begin
Result := ControlService(hService, SERVICE_CONTROL_STOP, ServiceStatus);
end;
end;
CloseServiceHandle(HService);
end;
CloseServiceHandle(SCManager);
end;
end;
Function ServiceIsInstalled()function ServiceIsInstalled(ServiceName: string): Boolean;
var
SCManager: THandle;
HService: THandle;
begin
Result := false;
if HInst = 0 then
Exit;
if Assigned(OpenSCManager) and Assigned(OpenService) and
Assigned(CloseServiceHandle) then
begin
SCManager := OpenSCManager(nil, nil, GENERIC_READ);
if SCManager <> 0 then
begin
HService := OpenService(SCManager, PChar(ServiceName), GENERIC_READ);
Result := HService <> 0;
if HService <> 0 then
begin
CloseServiceHandle(HService);
end;
CloseServiceHandle(SCManager);
end;
end;
end;
var
SCManager: THandle;
HService: THandle;
begin
Result := false;
if HInst = 0 then
Exit;
if Assigned(OpenSCManager) and Assigned(OpenService) and
Assigned(CloseServiceHandle) then
begin
SCManager := OpenSCManager(nil, nil, GENERIC_READ);
if SCManager <> 0 then
begin
HService := OpenService(SCManager, PChar(ServiceName), GENERIC_READ);
Result := HService <> 0;
if HService <> 0 then
begin
CloseServiceHandle(HService);
end;
CloseServiceHandle(SCManager);
end;
end;
end;
Function StartService()function StartService(ServiceName: string): Boolean;
var
SCManager: THandle;
HService: THandle;
ServiceStatus: TServiceStatus;
Parms: PChar;
begin
Result := false;
if HInst = 0 then
Exit;
SCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if SCManager <> 0 then
begin
HService := OpenService(SCManager, PChar(ServiceName), SERVICE_ALL_ACCESS);
if HService <> 0 then
begin
if QueryServiceStatus(hService, ServiceStatus) then
begin
if ServiceStatus.dwCurrentState = SERVICE_STOPPED then
begin
Parms := nil;
Result := DoStartService(hService, 0, Parms);
end;
end;
CloseServiceHandle(HService);
end;
CloseServiceHandle(SCManager);
end;
end;
var
SCManager: THandle;
HService: THandle;
ServiceStatus: TServiceStatus;
Parms: PChar;
begin
Result := false;
if HInst = 0 then
Exit;
SCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if SCManager <> 0 then
begin
HService := OpenService(SCManager, PChar(ServiceName), SERVICE_ALL_ACCESS);
if HService <> 0 then
begin
if QueryServiceStatus(hService, ServiceStatus) then
begin
if ServiceStatus.dwCurrentState = SERVICE_STOPPED then
begin
Parms := nil;
Result := DoStartService(hService, 0, Parms);
end;
end;
CloseServiceHandle(HService);
end;
CloseServiceHandle(SCManager);
end;
end;
Function ChangeServiceConfig()function ChangeServiceConfig(ServiceName: string; StartType: Integer): Boolean;
var
SCManager, HService: THandle;
PConfig: PQueryServiceConfigA;
Buf: DWORD;
begin
Result := False;
if HInst = 0 then Exit;
SCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if SCManager <> 0 then
begin
HService := OpenService(SCManager, PChar(ServiceName), SERVICE_ALL_ACCESS);
if HService <> 0 then
begin
New(PConfig);
QueryServiceConfigA(HService, PConfig, SizeOf(_QUERY_SERVICE_CONFIGA), Buf);
ChangeServiceConfigA(HService, PConfig.dwServiceType,
StartType, PConfig.dwErrorControl, PConfig.lpBinaryPathName,
PConfig.lpLoadOrderGroup, 0, PConfig.lpDependencies,
PConfig.lpServiceStartName, '', PConfig.lpDisplayName);
CloseServiceHandle(HService);
DisPose(PConfig);
Result := True;
end
else
Result := False;
CloseServiceHandle(SCManager);
end
else
Result := False;
end;
var
SCManager, HService: THandle;
PConfig: PQueryServiceConfigA;
Buf: DWORD;
begin
Result := False;
if HInst = 0 then Exit;
SCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if SCManager <> 0 then
begin
HService := OpenService(SCManager, PChar(ServiceName), SERVICE_ALL_ACCESS);
if HService <> 0 then
begin
New(PConfig);
QueryServiceConfigA(HService, PConfig, SizeOf(_QUERY_SERVICE_CONFIGA), Buf);
ChangeServiceConfigA(HService, PConfig.dwServiceType,
StartType, PConfig.dwErrorControl, PConfig.lpBinaryPathName,
PConfig.lpLoadOrderGroup, 0, PConfig.lpDependencies,
PConfig.lpServiceStartName, '', PConfig.lpDisplayName);
CloseServiceHandle(HService);
DisPose(PConfig);
Result := True;
end
else
Result := False;
CloseServiceHandle(SCManager);
end
else
Result := False;
end;
- Delphi 下操作Windows 服务的代码
- Windows CE下操作GPIO的方法
- Windows CE下操作GPIO的方法
- Windows CE下操作GPIO的方法
- Windows CE下操作GPIO的方法
- windows下操作mysql
- Windows下操作注册表
- Windows CE下操作GPIO
- windows批处理下操作mysql
- 在Windows下操作Linux的多标签工具
- windows下操作linux系统工具
- windows下操作ipynb(笔记)
- Android Studio下操作GitHub代码库
- 在windows下操作linux下的hdfs的java源码
- Windows CE下操作GPIO的方法(以ARM9 S3C2410为例)
- Windows CE下操作GPIO的方法(以ARM9 S3C2410为例)(转)
- Windows CE(EVC)下操作GPIO的方法——转载
- Windows CE下操作GPIO的方法(以ARM9 S3C2410为例)
- const与efficiency&design
- RMAN命令详解
- 利用GDAL库读取GeoTIFF文件
- ASP.NET中实现MSN通知消息功能
- Java路径问题最终解决方案
- Delphi 下操作Windows 服务的代码
- JS 变量
- 秀逗休闲游戏平台
- Apache java项目 介绍
- ReprotX2.0.0.0最近更改
- 怎么做需求分析
- JS If...Else
- 发布一个高效的JavaScript压缩工具 JSA
- TCP建立过程