您的位置:首页 > 编程语言 > Delphi

使用delphi新建服务,停止系统服务,以及获取服务状态和新建系统服务器的方法

2012-12-05 21:23 519 查看
bianxie

本文主要讲解了如何使用delphi新建服务,停止系统服务,以及获取服务状态和新建系统服务器的方法,以下是关键代码:

unit Servicescontrol;

interface
uses Windows,Messages,SysUtils,Winsvc,Dialogs;

function  StartServices(Const  SvrName:String):Boolean;
function  StopServices(Const  SvrName:String):Boolean;
function  QueryServiceStatu(Const SvrName:   String):String;
function  CreateServices(Const SvrName,FilePath:String):Boolean;
function  DeleteServices(Const SvrName: String):Boolean;

implementation

//开启服务
function StartServices(Const   SvrName:   String):   Boolean;
var
a,b:SC_HANDLE;
c:PChar;
begin
Result:=False;

a:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);

if a <=0 then  Exit;

b:=OpenService(a,PChar(SvrName),SERVICE_ALL_ACCESS);

if b <=0  then  Exit;
try
Result:=StartService(b,0,c);
CloseServiceHandle(b);
CloseServiceHandle(a);
except
CloseServiceHandle(b);
CloseServiceHandle(a);
Exit;
end;
end;

//停止服务
function   StopServices(Const   SvrName:   String):   Boolean;
var
a,b:   SC_HANDLE;
d:   TServiceStatus;
begin
Result := False;

a :=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);

if a <=0 then Exit;

b:=OpenService(a,PChar(SvrName),SERVICE_ALL_ACCESS);

if b <=0  then  Exit;
try
Result:=ControlService(b,SERVICE_CONTROL_STOP,d);
CloseServiceHandle(a);
CloseServiceHandle(b);
except
CloseServiceHandle(a);
CloseServiceHandle(b);
Exit;
end;
end;

//查询当前服务的状态
function  QueryServiceStatu(Const   SvrName:   String):   String;
var
a,b:   SC_HANDLE;
d:   TServiceStatus;
begin
Result := '未安装';

a := OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);

if a <=0 then  Exit;

b := OpenService(a,PChar(SvrName),SERVICE_ALL_ACCESS);

if  b  <= 0  then  Exit;
try
QueryServiceStatus(b,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(a);
CloseServiceHandle(b);
except
CloseServiceHandle(a);
CloseServiceHandle(b);
Exit;
end;
end;

{建立服务}
function  CreateServices(Const SvrName,FilePath:   String):   Boolean;
var
a,b:SC_HANDLE;
begin
Result:=False;
if  FilePath   =''   then   Exit;

a   :=   OpenSCManager(nil,nil,SC_MANAGER_CREATE_SERVICE);

if   a   <=   0   then   Exit;
try
b   :=   CreateService(a,PChar(SvrName),
PChar(SvrName),
SERVICE_ALL_ACCESS,
SERVICE_INTERACTIVE_PROCESS   or   SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,
PChar(FilePath),nil,nil,nil,nil,nil);
if   b   <=   0   then   begin
ShowMessage(   SysErrorMessage(   GetlastError   ));
Exit;
end;
CloseServiceHandle(a);
CloseServiceHandle(b);

Result   :=   True;
except
CloseServiceHandle(a);
CloseServiceHandle(b);
Exit;
end;
end;

{卸载服务}
function   DeleteServices(Const   SvrName:   String):   Boolean;
var
a,b:SC_HANDLE;
begin
Result:=False;
a := OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
if a <= 0 then  Exit;
b :=OpenService(a,PChar(SvrName),STANDARD_RIGHTS_REQUIRED);
if b <= 0 then Exit;
try
Result := DeleteService(b);

if not Result then
ShowMessage(SysErrorMessage(GetlastError));
CloseServiceHandle(b);
CloseServiceHandle(a);
except
CloseServiceHandle(b);
CloseServiceHandle(a);
Exit;
end;
end;
end.

调用方法:

{启动服务}
StartServices(服务名);
{停止服务}
StopServices(服务名);
{新建服务}
CreateServices(服务名,exe文件路径);
{删除服务}
DeleteServices(服务名);
{获取服务状态}
string:=QueryServiceStatu(服务名);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐