Delphi 下操作Windows 服务的代码
2007-03-06 11:13
423 查看
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
相关文章推荐
- delphi操作windows COM+组件服务一
- delphi操作windows COM+组件服务二
- delphi操作windows COM+组件服务三
- Windows服务用C++代码实现的一些操作-1:修改服务启动类型
- cmd下 windows服务操作代码(可以写成bat文件,然后用batOS这个软件以静默模式包装一下)
- Windows 服务操作映射网络驱动器示例
- Delphi开启Windows目录对话框代码
- .net中的windows service与调服务操作
- Windows 不能在 本地计算机 启动 SQL Server 服务 错误代码126
- 基于Visual C++之Windows核心编程代码分析(5)操作注册表与系统时间
- .net中的windows service与服务操作
- 使用C#代码安装 Windows 服务--直接运行安装服务
- C#创建windows服务搭配定时器Timer使用实例(用代码做,截图版)(从iteye搬到博客园)
- windows 服务操作(可弹框)
- windows系统服务编程代码示例分享
- Windows服务程序实现定时操作【转载】
- Windows注册表操作基础代码
- Windows上传代码到github操作指导
- Windows Azure Marketplace入门教学-通过代码操作DataMarket数据源