使用DELPHI 在windwos 及NT 上服务注册的具体实现.docx

上传人:b****7 文档编号:10805622 上传时间:2023-02-23 格式:DOCX 页数:17 大小:16.78KB
下载 相关 举报
使用DELPHI 在windwos 及NT 上服务注册的具体实现.docx_第1页
第1页 / 共17页
使用DELPHI 在windwos 及NT 上服务注册的具体实现.docx_第2页
第2页 / 共17页
使用DELPHI 在windwos 及NT 上服务注册的具体实现.docx_第3页
第3页 / 共17页
使用DELPHI 在windwos 及NT 上服务注册的具体实现.docx_第4页
第4页 / 共17页
使用DELPHI 在windwos 及NT 上服务注册的具体实现.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

使用DELPHI 在windwos 及NT 上服务注册的具体实现.docx

《使用DELPHI 在windwos 及NT 上服务注册的具体实现.docx》由会员分享,可在线阅读,更多相关《使用DELPHI 在windwos 及NT 上服务注册的具体实现.docx(17页珍藏版)》请在冰豆网上搜索。

使用DELPHI 在windwos 及NT 上服务注册的具体实现.docx

使用DELPHI在windwos及NT上服务注册的具体实现

使用DELPHI在windwos2000及NT上服务注册的具体实现

 

{**************************************************************}

{*******************************************************}

{*程序编写:

陈林茂

{*编写日期:

2003-01-05

{*联系作者:

linmaochen@

{*******************************************************}

interface

uses

Windows,Classes,SysUtils,Winsvc,nb30,winsock;

Type

{服务句柄信息}

TScmInfo=Record

HostName:

String;

DataBaseName:

String;

DesireAccess:

DWORD;

End;

{服务信息}

TSvcInfo=Record

HscManager:

Integer;

ServerName:

String;//服务名

DisplayName:

String;//服务的显示名

DesireAccess:

DWORD;//

ServiceType:

Dword;//服务的类别

StartType:

Dword;//服务的启动方式

ErrorControl:

Dword;//服务错误控制方式

BinaryPathName:

String;//服务执行文件的具体路径

LoadOrderGroup:

String;

TagId:

Dword;

Dependencies:

String;//依赖:

有多个依赖的服务时,中间以空格隔开}

ServerStartName:

String;

Password:

String;

End;

//需要注册的服务信息数组

SvcArray=Array[1..20]ofTSvcInfo;

Type

{服务控制类}

TService=Class(TObject)

Private

Scm_Info:

TScmInfo;

Svc_Info:

TSvcInfo;

ScmHandle:

Integer;

{服务句柄}

SvcHandle:

Integer;

Public

ConstructorCreate();

DestructorDestroy();Override;

FunctionSetScmInfo():

Boolean;

FunctionOpenScmHandle():

Integer;

FunctionSetServiceInfo(TmpSvc:

TsvcInfo):

Boolean;

FunctionCreateService():

Boolean;

{删除一服务}

FunctionDelete_AService(ServiceName:

String):

Boolean;

{建立一服务}

FunctionOpen_Service(ServiceName:

String):

Boolean;

{/////////////////////////////////////////////////////////////////////}

{//函数名称:

IsSvcExists()

{//函数功能:

判断系统中相关的服务是否存在

{//参数信息:

需要判断的服务名

{//返回值:

TRUE:

WINDOWS中的服务已存在,FALSE:

WINDOWS中的服务不存在

{//

{/////////////////////////////////////////////////////////////////////}

FunctionisSvcExists(ServiceName:

string):

Boolean;

{/////////////////////////////////////////////////////////////////////////}

{//函数名称:

Start_Service()

{//函数功能:

启动相关的服务进程

{//参数信息:

需要启动的服务名

{//返回值:

TRUE:

服务已经启动;FALSE:

服务启动失败;

{/////////////////////////////////////////////////////////////////////////}

FunctionControl_Service(ServiceName:

String;controlType:

integer):

Boolean;

{/////////////////////////////////////////////////////////////////////////}

{//函数名称:

IsServiceStart()

{//函数功能:

判断服务是否启动

{//参数信息:

需要判断的服务名

{//返回值:

TRUE:

服务已经启动;FALSE:

服务已停止

{/////////////////////////////////////////////////////////////////////////}

FunctionIsServiceStart(ServiceName:

String):

Boolean;

End;

implementation

{TService}

constructorTService.Create;

begin

try

ScmHandle:

=0;

SetScmInfo();

ScmHandle:

=OpenSCManager(PChar(Scm_Info.HostName),Nil,Scm_Info.DesireAccess);

Except

End;

end;Top

{建立一服务}

functionTService.CreateService():

Boolean;

Var

i:

Integer;

begin

Try

OpenScmHandle();

svc_info.HscManager:

=ScmHandle;

Result:

=False;

SvcHandle:

=CreateService(svc_Info.HscManager,Pchar(svc_Info.ServerName),Pchar(Svc_Info.DisplayName),Svc_info.DesireAccess,

svc_INfo.ServiceType,Svc_Info.StartType,Svc_Info.ErrorControl,pchar(Svc_Info.BinaryPathName),

pchar(''),LPDWORD(0),Pchar(Svc_Info.Dependencies),Pchar(Svc_info.ServerStartName),Pchar(Svc_Info.Password));

IfSvcHandle<>0Then

Begin

Result:

=True;

CloseServiceHandle(SvcHandle);

End;

I:

=i+1;

Except

End;

end;

{注销一服务}

functionTService.Delete_AService(ServiceName:

String):

Boolean;

Var

RHandle:

Integer;

rc:

Boolean;

begin

Try

OpenScmHandle();

Result:

=False;

IfScmHandle<>0Then

Begin

RHandle:

=OpenService(ScmHandle,PChar(ServiceName),SERVICE_ALL_ACCESS);

IfRHandle<>0Then

Begin

Rc:

=DeleteService(Rhandle);

Result:

=Rc;

{关闭句柄}

CloseServiceHandle(RHandle);

EndElseResult:

=True;

End;

Except

End;

end;

destructorTService.Destroy;

begin

try

CloseServiceHandle(ScmHandle);

Except

End;

end;

{打开数据库的句柄}

functionTService.isSvcExists(ServiceName:

string):

Boolean;

Var

RHandle:

Integer;

rc:

Boolean;

begin

Try

OpenScmHandle();

Result:

=False;

IfScmHandle<>0Then

Begin

RHandle:

=OpenService(ScmHandle,PChar(ServiceName),SERVICE_ALL_ACCESS);

IfRHandle<>0Then

Begin

Result:

=true;

{关闭句柄}

CloseServiceHandle(RHandle);

End;

End;

Except

End;

end;

functionTService.OpenScmHandle:

Integer;

begin

try

SetScmInfo();

ifScmHandle<>0ThenCloseServiceHandle(ScmHandle);

ScmHandle:

=0;

ScmHandle:

=OpenSCManager(PChar(Scm_Info.HostName),Nil,Scm_Info.DesireAccess);

ifScmHandle=0then

ScmHandle:

=OpenSCManager(PChar(Scm_Info.HostName),Nil,Scm_Info.DesireAccess);

Except

End;

end;

{打开一服务}

functionTService.Open_Service(ServiceName:

String):

Boolean;

Var

SHandle:

Integer;

begin

Try

Result:

=False;

sHandle:

=0;

SHandle:

=OpenScmHandle();

IfSHandle<>0Then

Begin

SvcHandle:

=OpenService(SHandle,PChar(ServiceName),SERVICE_ALL_ACCESS);

IfSvcHandle<>0ThenResult:

=True;

End;

Except

End;

end;

functionTService.SetScmInfo():

Boolean;

Var

hostName:

array[0..255]ofchar;

wsdata:

TWSAData;

begin

try

WSAStartup($0101,wsdata);

Result:

=False;

gethostname(hostName,sizeof(hostName));

IfHostName=''Then

Exit;

scm_Info.HostName:

=HostName;

Scm_Info.DesireAccess:

=SC_MANAGER_ALL_ACCESS;

Except

End;

end;

//设置需要注册的WINDOWS服务的具体信息

functionTService.SetServiceInfo(TmpSvc:

TsvcInfo):

Boolean;

begin

try

Result:

=False;

IfScmHandle>0Then

Begin

Svc_Info:

=TmpSvc;

Svc_Info.HscManager:

=ScmHandle;

Result:

=True;

End;

Except

End;

end;

//控制WINDOWS系统内部的服务

functionTService.Control_Service(ServiceName:

String;controlType:

Integer):

Boolean;

Var

RHandle:

Integer;

rc:

Boolean;

Rec_status:

TServiceStatus;

serviceArg:

Pchar;

i:

Integer;

begin

i:

=0;

serviceArg:

=Pchar('');

Try

Result:

=False;

IfScmHandle<>0Then

Begin

RHandle:

=OpenService(ScmHandle,PChar(ServiceName),SERVICE_ALL_ACCESS);

IfRHandle<>0Then

Begin

CasecontrolTypeof

1:

//启动服务器

Begin

//ControlService(rHandle,SERVICE_CONTROL_START,rec_status);

StartService(rHandle,0,servicearg);

i:

=0;

Whilei<30Do

Begin

QueryServiceStatus(RHandle,Rec_status);

ifrec_status.dwCurrentState=SERVICE_RUNNINGthen

Begin

result:

=True;

CloseServiceHandle(RHandle);

Break;

End;

sleep(1000);

i:

=i+1;

End;

End;

2:

//暂停服务进程

Begin

ControlService(rHandle,SERVICE_CONTROL_PAUSE,rec_status);

i:

=0;

Whilei<30Do

Begin

QueryServiceStatus(RHandle,Rec_status);

ifrec_status.dwCurrentState=SERVICE_PAUSEDthen

Begin

result:

=true;

CloseServiceHandle(RHandle);

Break;

End;

Sleep(1000);

i:

=i+1;

End;

End;

3:

//唤醒服务进程

Begin

ControlService(rHandle,SERVICE_CONTROL_CONTINUE,rec_status);

i:

=0;

Whilei<30do

Begin

QueryServiceStatus(RHandle,Rec_status);

ifrec_status.dwCurrentState=SERVICE_RUNNINGthen

Begin

result:

=True;

CloseServiceHandle(RHandle);

Break;

End;

Sleep(1000);

i:

=i+1;

End;

End;

4:

//停止服务进程

begin

ControlService(rHandle,SERVICE_CONTROL_STOP,rec_status);

i:

=0;

Whilei<30Do

Begin

QueryServiceStatus(RHandle,Rec_status);

ifrec_status.dwCurrentState=SERVICE_STOPPEDthen

Begin

result:

=True;

CloseServiceHandle(RHandle);

Break;

End;

Sleep(1000);

i:

=i+1;

End;

End;

5:

//关闭服务程序SERVICE_CONTROL_SHUTDOWN

Begin

rec_status.dwCurrentState:

=SERVICE_RUNNING;

ControlService(rHandle,SERVICE_CONTROL_STOP,rec_status);

i:

=0;

Whilei<30Do

Begin

QueryServiceStatus(RHandle,Rec_status);

ifrec_status.dwCurrentState=SERVICE_STOPPEDthen

Begin

result:

=True;

CloseServiceHandle(RHandle);

Break;

End;

Sleep(1000);

i:

=i+1;

End;

End;

end;

Result:

=true;

{关闭句柄}

ifrHandle<>0then

CloseServiceHandle(RHandle);

End;

End;

Except

End;

end;

functionTService.IsServiceStart(ServiceName:

String):

Boolean;

Var

RHandle:

Integer;

rc:

Boolean;

Rec_status:

TServiceStatus;

begin

Try

OpenScmHandle();

Result:

=False;

IfScmHandle<>0Then

Begin

RHandle:

=0;

RHandle:

=OpenService(ScmHandle,PChar(ServiceName),SERVICE_ALL_ACCESS);

IfRHandle<>0Then

Begin

QueryServiceStatus(RHandle,Rec_status);

ifrec_status.dwCurrentState=SERVICE_RUNNINGthen

result:

=True;

{关闭句柄}

CloseServiceHandle(RHandle);

End;

End;

Except

End;

end;

end.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 动态背景

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1