我想定时把Windows中的一项服务启动一下?请教该怎么做?
服务中已经有了这一条服务,只需要将停止的服务启动一下就行。
请问高手该怎么做呢?
最好能有具体的源代码。
服务中已经有了这一条服务,只需要将停止的服务启动一下就行。
请问高手该怎么做呢?
最好能有具体的源代码。
解决方案 »
- 怎样在windows mediaplayer里播放二进制文件?
- 思考题(TCPServer-TcpClient): 请大家帮忙解答!,谢谢
- 帮忙看看这是啥意思?是类吗?请教高手哦!
- 统计字符串中某字符的出现次数
- 请教如何编程获得机器的gateway,100分啊
- 怎么回事。formshow 不能写太多sql语句么〉?,怎么不显示?大家快帮看看,急死了
- 怎么通过nmhttp提交自己的用户名密码?
- 高人:DefaultDrawColumnCell(Rect, DataCol, Column, State)括号里的参数各代表什麽意识,如能解答在在下感激不禁,急急急!!!
- 能不能直接向stringgrid中输入数据?
- Tedit 怎样设定只接受数字
- 日期字段显示 invalid Time
- c++的函数fun(char *srcData,long srcLen,char *tagData,long *tagLen)在delphi中该怎么写?
The following class TServiceManager can be used to manage your NT-Services.
You can do things like start, stop, pause or querying a services status.
} unit ServiceManager; interface uses
SysUtils, Windows, WinSvc; type TServiceManager = class
private
{ Private declarations }
ServiceControlManager: SC_Handle;
ServiceHandle: SC_Handle;
protected
function DoStartService(NumberOfArgument: DWORD; ServiceArgVectors: PChar): Boolean;
public
{ Public declarations }
function Connect(MachineName: PChar = nil; DatabaseName: PChar = nil;
Access: DWORD = SC_MANAGER_ALL_ACCESS): Boolean; // Access may be SC_MANAGER_ALL_ACCESS
function OpenServiceConnection(ServiceName: PChar): Boolean;
function StartService: Boolean; overload; // Simple start
function StartService(NumberOfArgument: DWORD; ServiceArgVectors: PChar): Boolean;
overload; // More complex start
function StopService: Boolean;
procedure PauseService;
procedure ContinueService;
procedure ShutdownService;
procedure DisableService;
function GetStatus: DWORD;
function ServiceRunning: Boolean;
function ServiceStopped: Boolean;
end; implementation { TServiceManager } function TServiceManager.Connect(MachineName, DatabaseName: PChar;
Access: DWORD): Boolean;
begin
Result := False;
{ open a connection to the windows service manager }
ServiceControlManager := OpenSCManager(MachineName, DatabaseName, Access);
Result := (ServiceControlManager <> 0);
end;
function TServiceManager.OpenServiceConnection(ServiceName: PChar): Boolean;
begin
Result := False;
{ open a connetcion to a specific service }
ServiceHandle := OpenService(ServiceControlManager, ServiceName, SERVICE_ALL_ACCESS);
Result := (ServiceHandle <> 0);
end; procedure TServiceManager.PauseService;
var
ServiceStatus: TServiceStatus;
begin
{ Pause the service: attention not supported by all services }
ControlService(ServiceHandle, SERVICE_CONTROL_PAUSE, ServiceStatus);
end; function TServiceManager.StopService: Boolean;
var
ServiceStatus: TServiceStatus;
begin
{ Stop the service }
Result := ControlService(ServiceHandle, SERVICE_CONTROL_STOP, ServiceStatus);
end; procedure TServiceManager.ContinueService;
var
ServiceStatus: TServiceStatus;
begin
{ Continue the service after a pause: attention not supported by all services }
ControlService(ServiceHandle, SERVICE_CONTROL_CONTINUE, ServiceStatus);
end; procedure TServiceManager.ShutdownService;
var
ServiceStatus: TServiceStatus;
begin
{ Shut service down: attention not supported by all services }
ControlService(ServiceHandle, SERVICE_CONTROL_SHUTDOWN, ServiceStatus);
end; function TServiceManager.StartService: Boolean;
begin
Result := DoStartService(0, '');
end; function TServiceManager.StartService(NumberOfArgument: DWORD;
ServiceArgVectors: PChar): Boolean;
begin
Result := DoStartService(NumberOfArgument, ServiceArgVectors);
end; function TServiceManager.GetStatus: DWORD;
var
ServiceStatus: TServiceStatus;
begin
{ Returns the status of the service. Maybe you want to check this
more than once, so just call this function again.
Results may be: SERVICE_STOPPED
SERVICE_START_PENDING
SERVICE_STOP_PENDING
SERVICE_RUNNING
SERVICE_CONTINUE_PENDING
SERVICE_PAUSE_PENDING
SERVICE_PAUSED }
Result := 0;
QueryServiceStatus(ServiceHandle, ServiceStatus);
Result := ServiceStatus.dwCurrentState;
end; procedure TServiceManager.DisableService;
begin
{ Implementation is following... }
end; function TServiceManager.ServiceRunning: Boolean;
begin
Result := (GetStatus = SERVICE_RUNNING);
end; function TServiceManager.ServiceStopped: Boolean;
begin
Result := (GetStatus = SERVICE_STOPPED);
end; function TServiceManager.DoStartService(NumberOfArgument: DWORD;
ServiceArgVectors: PChar): Boolean;
var
err: integer;
begin
Result := WinSvc.StartService(ServiceHandle, NumberOfArgument, ServiceArgVectors);
end; end. http://lysoft.7u7.net
var
SvcMgr: TServiceManager;
begin
SvcMgr:= TServiceManager.Create;
SvcMgr.Connect;
SvcMgr.OpenServiceConnection(PChar('Saservice')); // Sygate proxy 服务
ShowMessage(IntToStr(SvcMgr.GetStatus));
SvcMgr.Free;
end;ps:作为Client Programer 用别人写的类,看 interface块就行了,这个类写的还很清晰的;
否则,去看看里面哪几个API也很容易弄懂