转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
windwos 2000及NT 服务注册的具体实现         ★★★★

windwos 2000及NT 服务注册的具体实现

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1726 更新时间:2009/4/23 18:38:21

windwos 2000及NT 服务注册的具体实现

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

{*******************************************************}
{*  程序编写: 陈林茂
{*  编写日期: 2003-01-05
{*  联系作者: linmaochen@sohu.com
{*******************************************************}

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] of TSvcInfo;

  Type

   {服务控制类}
   TService=Class(TObject)
   Private
     Scm_Info  :TScmInfo;
     Svc_Info  :TSvcInfo;
     ScmHandle :Integer;

     {服务句柄}
     SvcHandle :Integer;


   Public
     Constructor Create();
     Destructor Destroy();Override;
     Function SetScmInfo():Boolean;
     Function OpenScmHandle():Integer;
     Function SetServiceInfo(TmpSvc :TsvcInfo):Boolean;
     Function CreateService():Boolean;

     {删除一服务}
     Function Delete_AService(ServiceName :String):Boolean;

     {建立一服务}
     Function Open_Service(ServiceName :String):Boolean;

{/////////////////////////////////////////////////////////////////////}
{//  函数名称: IsSvcExists()
{//  函数功能: 判断系统中相关的服务是否存在
{//  参数信息: 需要判断的服务名
{//  返回值:   TRUE : WINDOWS 中的服务已存在,FALSE :WINDOWS 中的服务不存在
{//
{/////////////////////////////////////////////////////////////////////}
     Function isSvcExists(ServiceName :string):Boolean;

{/////////////////////////////////////////////////////////////////////////}
{//  函数名称: Start_Service()
{//  函数功能: 启动相关的服务进程
{//  参数信息: 需要启动的服务名
{//  返回值:   TRUE :服务已经启动;FALSE:服务启动失败;
{/////////////////////////////////////////////////////////////////////////}
     Function Control_Service(ServiceName : String; controlType :integer):Boolean;

{/////////////////////////////////////////////////////////////////////////}
{//  函数名称: IsServiceStart()
{//  函数功能: 判断服务是否启动
{//  参数信息:  需要判断的服务名
{//  返回值:   TRUE :服务已经启动; FALSE :服务已停止
{/////////////////////////////////////////////////////////////////////////}
     Function IsServiceStart(ServiceName:String):Boolean;

   End;

implementation

 

{ TService }

constructor TService.Create;
begin
  try
    ScmHandle :=0;
    SetScmInfo();
    ScmHandle:=OpenSCManager(PChar(Scm_Info.HostName),Nil,Scm_Info.DesireAccess);
  Except
  End; 


end;

{建立一服务}
function TService.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));

   If SvcHandle <> 0 Then
    Begin
      Result :=True;
      CloseServiceHandle(SvcHandle);
    End ;
    I:=i+1;
  Except
  End;

end;


{注销一服务}
function TService.Delete_AService(ServiceName: String): Boolean;
Var
  RHandle:Integer;
  rc :Boolean;
begin
  Try
    OpenScmHandle();
    Result :=False;
    If ScmHandle<>0 Then
    Begin
      RHandle :=OpenService(ScmHandle,PChar(ServiceName),SERVICE_ALL_ACCESS );
      If RHandle <>0 Then
      Begin

        Rc :=DeleteService(Rhandle);
        Result :=Rc;
        {关闭句柄}
        CloseServiceHandle(RHandle);
      End Else Result :=True;
    End;
  Except
  End;
end;

destructor TService.Destroy;
begin
  try
    CloseServiceHandle(ScmHandle);
  Except
  End;

end;

{打开数据库的句柄}
function TService.isSvcExists(ServiceName: string): Boolean;
Var
  RHandle:Integer;
  rc :Boolean;
begin
  Try
    OpenScmHandle();
    Result :=False;
    If ScmHandle<>0 Then
    Begin
      RHandle :=OpenService(ScmHandle,PChar(ServiceName),SERVICE_ALL_ACCESS );
      If RHandle <>0 Then
      Begin

        Result :=true;
        {关闭句柄}
        CloseServiceHandle(RHandle);
      End;
    End;
  Except
  End;
end;

function TService.OpenScmHandle: Integer;
begin
  try
    SetScmInfo();
    if  ScmHandle <>0 Then CloseServiceHandle(ScmHandle);
    ScmHandle := 0;
    ScmHandle :=OpenSCManager(PChar(Scm_Info.HostName),Nil,Scm_Info.DesireAccess);
    if ScmHandle = 0 then
      ScmHandle :=OpenSCManager(PChar(Scm_Info.HostName),Nil,Scm_Info.DesireAccess);
  Except
  End;
end;


{打开一服务}
function TService.Open_Service(ServiceName: String): Boolean;
Var
  SHandle :Integer;
begin
  Try
    Result :=False;
    sHandle := 0;
    SHandle :=OpenScmHandle();
    If SHandle<>0 Then
    Begin
      SvcHandle :=OpenService(SHandle,PChar(ServiceName),SERVICE_ALL_ACCESS );
      If SvcHandle <>0 Then Result :=True;
    End;
  Except
  End;

end;

function TService.SetScmInfo(): Boolean;
Var
  hostName : array [0..255] of char;
  wsdata : TWSAData;
begin
  try
    WSAStartup ($0101, wsdata);
    Result :=False;
    gethostname (hostName,sizeof(hostName));

    If HostName ='''''''' Then
      Exit;

    scm_Info.HostName :=HostName;
    Scm_Info.DesireAccess :=SC_MANAGER_ALL_ACCESS;
  Except
  End;

end;

 

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

function TService.SetServiceInfo(TmpSvc: TsvcInfo): Boolean;
begin
  try
    Result :=False;
    If ScmHandle >0 Then
    Begin
      Svc_Info :=TmpSvc;
      Svc_Info.HscManager :=ScmHandle;
      Result :=True;
    End;
  Except
  End;

end;

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

function TService.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;
    If ScmHandle <>0 Then
    Begin
      RHandle :=OpenService(ScmHandle,PChar(ServiceName),SERVICE_ALL_ACCESS );
      If RHandle <>0 Then
      Begin
        Case controlType of
    

[1] [2] [3]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台