1. unit Service;
  2. interface
  3. uses Windows,Messages,SysUtils,Winsvc,Dialogs;
  4. function  StartServices(Const  SvrName:String):Boolean;
  5. function  StopServices(Const  SvrName:String):Boolean;
  6. function  QueryServiceStatu(Const SvrName:   String):String;
  7. function  CreateServices(Const SvrName,FilePath:String):Boolean;
  8. function  DeleteServices(Const SvrName: String):Boolean;
  9. implementation
  10. //开启服务
  11. function StartServices(Const   SvrName:   String):   Boolean;
  12. var
  13. a,b:SC_HANDLE;
  14. c:PChar;
  15. begin
  16. Result:=False;
  17. a:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
  18. if a <=0 then  Exit;
  19. b:=OpenService(a,PChar(SvrName),SERVICE_ALL_ACCESS);
  20. if b <=0  then  Exit;
  21. try
  22. Result:=StartService(b,0,c);
  23. CloseServiceHandle(b);
  24. CloseServiceHandle(a);
  25. except
  26. CloseServiceHandle(b);
  27. CloseServiceHandle(a);
  28. Exit;
  29. end;
  30. end;
  31. //停止服务
  32. function   StopServices(Const   SvrName:   String):   Boolean;
  33. var
  34. a,b:   SC_HANDLE;
  35. d:   TServiceStatus;
  36. begin
  37. Result := False;
  38. a :=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
  39. if a <=0 then Exit;
  40. b:=OpenService(a,PChar(SvrName),SERVICE_ALL_ACCESS);
  41. if b <=0  then  Exit;
  42. try
  43. Result:=ControlService(b,SERVICE_CONTROL_STOP,d);
  44. CloseServiceHandle(a);
  45. CloseServiceHandle(b);
  46. except
  47. CloseServiceHandle(a);
  48. CloseServiceHandle(b);
  49. Exit;
  50. end;
  51. end;
  52. //查询当前服务的状态
  53. function  QueryServiceStatu(Const   SvrName:   String):   String;
  54. var
  55. a,b:   SC_HANDLE;
  56. d:   TServiceStatus;
  57. begin
  58. Result := '未安装';
  59. a := OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
  60. if a <=0 then  Exit;
  61. b := OpenService(a,PChar(SvrName),SERVICE_ALL_ACCESS);
  62. if  b  <= 0  then  Exit;
  63. try
  64. QueryServiceStatus(b,d);
  65. if   d.dwCurrentState     =   SERVICE_RUNNING   then
  66. Result   :=   '启动'       //Run
  67. else   if   d.dwCurrentState     =   SERVICE_RUNNING   then
  68. Result   :=   'Wait'       //Runing
  69. else   if   d.dwCurrentState     =   SERVICE_START_PENDING then
  70. Result   :=   'Wait'       //Pause
  71. else   if   d.dwCurrentState     =   SERVICE_STOP_PENDING     then
  72. Result   :=   '停止'       //Pause
  73. else   if   d.dwCurrentState     =   SERVICE_PAUSED   then
  74. Result   :=   '暂停'       //Pause
  75. else   if   d.dwCurrentState     =   SERVICE_STOPPED   then
  76. Result   :=   '停止'     //Stop
  77. else   if   d.dwCurrentState     =   SERVICE_CONTINUE_PENDING     then
  78. Result   :=   'Wait'       //Pause
  79. else   if   d.dwCurrentState     =   SERVICE_PAUSE_PENDING   then
  80. Result   :=   'Wait';       //Pause
  81. CloseServiceHandle(a);
  82. CloseServiceHandle(b);
  83. except
  84. CloseServiceHandle(a);
  85. CloseServiceHandle(b);
  86. Exit;
  87. end;
  88. end;
  89. {建立服务}
  90. function  CreateServices(Const SvrName,FilePath:   String):   Boolean;
  91. var
  92. a,b:SC_HANDLE;
  93. begin
  94. Result:=False;
  95. if  FilePath   =''   then   Exit;
  96. a   :=   OpenSCManager(nil,nil,SC_MANAGER_CREATE_SERVICE);
  97. if   a   <=   0   then   Exit;
  98. try
  99. b   :=   CreateService(a,PChar(SvrName),
  100. PChar(SvrName),
  101. SERVICE_ALL_ACCESS,
  102. SERVICE_INTERACTIVE_PROCESS   or   SERVICE_WIN32_OWN_PROCESS,
  103. SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,
  104. PChar(FilePath),nil,nil,nil,nil,nil);
  105. if   b   <=   0   then   begin
  106. ShowMessage(   SysErrorMessage(   GetlastError   ));
  107. Exit;
  108. end;
  109. CloseServiceHandle(a);
  110. CloseServiceHandle(b);
  111. Result   :=   True;
  112. except
  113. CloseServiceHandle(a);
  114. CloseServiceHandle(b);
  115. Exit;
  116. end;
  117. end;
  118. {卸载服务}
  119. function   DeleteServices(Const   SvrName:   String):   Boolean;
  120. var
  121. a,b:SC_HANDLE;
  122. begin
  123. Result:=False;
  124. a := OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
  125. if a <= 0 then  Exit;
  126. b :=OpenService(a,PChar(SvrName),STANDARD_RIGHTS_REQUIRED);
  127. if b <= 0 then Exit;
  128. try
  129. Result := DeleteService(b);
  130. if not Result then
  131. ShowMessage(SysErrorMessage(GetlastError));
  132. CloseServiceHandle(b);
  133. CloseServiceHandle(a);
  134. except
  135. CloseServiceHandle(b);
  136. CloseServiceHandle(a);
  137. Exit;
  138. end;
  139. end;
  140. end.
  141. 调用方法:
  142. {启动服务}
  143. StartServices(服务名);
  144. {停止服务}
  145. StopServices(服务名);
  146. {新建服务}
  147. CreateServices(服务名,exe文件路径);
  148. {删除服务}
  149. DeleteServices(服务名);
  150. {获取服务状态}
  151. string:=QueryServiceStatu(服务名);

http://blog.csdn.net/yanjiaye520/article/details/7840911

Delphi 服务操作的更多相关文章

  1. delphi xe10 手机程序事件服务操作、退出键操作

    //程序事件服务操作 var FMXApplicationEventService: IFMXApplicationEventService; begin if TPlatformServices.C ...

  2. Delphi服务端和PHP客户端通过Socket通信

    在开始之前看下效果 PHP页面作为客户端发送请求给作为服务端的Delphi应用程序 PHP客户端页面打开如下 Delphi服务端应用程序打开如下 每次PHP页面刷新一下,Delphi的文本框都显示&q ...

  3. 【C#】分享基于Win32 API的服务操作类(解决ManagedInstallerClass.InstallHelper不能带参数安装的问题)

    注:这里的服务是指Windows 服务. ------------------201508250915更新------------------ 刚刚得知TransactedInstaller类是支持带 ...

  4. Delphi Excel 操作大全

    Delphi Excel 操作大全 (一) 使用动态创建的方法首先创建 Excel 对象,使用ComObj:var ExcelApp: Variant;ExcelApp := CreateOleObj ...

  5. delphi 换行操作 Word

    delphi 换行操作 我将我的商用<旅行社管理系统>的 发团通知 部分奉献给您,望对您有所帮助. procedure TFrmMain.N327Click(Sender: TObject ...

  6. Dynamics AX 2012 R2 在增强入站端口中找不到自定义服务操作

        Reinhard写好自定义服务A,添加好服务操作A1,A2,A3.....     然后,Reinhard在增强的入站端口,选择服务操作时,却找不到这些A1,A2,A3.     查找相关资料 ...

  7. Delphi摄像头操作

    /*Title:Delphi摄像头操作 *Author:Insun *Blog:http://yxmhero1989.blog.163.com *From:www.4safer.com */ 为了笔耕 ...

  8. Delphi内存操作API函数(备查,并一一学习)

    Delphi内存操作API函数System.IsMemoryManagerSet;System.Move;System.New;System.ReallocMem;System.ReallocMemo ...

  9. WCF 客户端调用服务操作的两种方法

    本节的主要内容:1.通过代理类的方式调用服务操作.2.通过通道的方式调用服务操作.3.代码下载 一.通过代理类的方式调用服务操作(两种方式添加代理类) 1.手动编写代理类,如下: 客户端契约: usi ...

随机推荐

  1. LogBoy 之Android Studio控制台输出日志太多清空

    在使用Android studio的时候,有时候会由于手机输出的日志太多,导致控制台瞬间清空,尤其是遇见一些FATAL Exception时候,瞬间控制台就被清空了,根本捕获不到,导致其他调试的日志也 ...

  2. Canvas的补充

    一.Canvas.save()作用:让后续的操作就好像在一个新图层上. 二.Canvas.restore():让之前save()产生的图层全部合并. 三.Canvas.translate():将原点( ...

  3. Python之路第六天,进阶-算法

    排序算法 冒泡排序 冒泡排序原理: 原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第 ...

  4. nginx的请求接收流程(二)

    在ngx_http_process_request_line函数中,解析完请求行之后,如果请求行的uri里面包含了域名部分,则将其保持在请求结构的headers_in成员的server字段,heade ...

  5. VirtualBox 上安装CentOS 6.5

    目标:1.在VirtualBox中安装CentOS2.配置虚拟机网络,实现:    a.主机联网后,宿机能够通过主机上网    b.不管主机联网与否,主机都能SSH登录宿机,并且主宿机能互相传送文件 ...

  6. GO的GDB调试

    GoLang语言,学了很久,一直觉得它单步调试有较多问题,最近才知道自已对它了解得太少了.原来GO语言对GDB的版本是至少为gdb7以上,才能比较好的打印任意变量,如果低于这个版本,则才会出一些问题. ...

  7. windows窗口分析,父窗口,子窗口,所有者窗口

    (本文尝试通过一些简单的实验,来分析Windows的窗口机制,并对微软的设计理由进行一定的猜测,需要读者具备C++.Windows编程及MFC经验,还得有一定动手能力.文中可能出现一些术语不统一的现象 ...

  8. GIS 相关知识扫盲

    1.什么是GIS GIS:地理信息系统,它是一种特定的十分重要的空间信息系统.它是在计算机硬.软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集.储存.管理.运算.分析 ...

  9. Debian安装JAVA环境(转载)

    Debian官方没有维护专门的Java软件包,所以不能直接用apt-get工具来安装.在Debian系统中要安装Java,有两种方式,一种是用传统方式:一种是Debian方式. 1. 传统方式 在 s ...

  10. 2014:超越炒作,进入部署SDN的时代

    2013 年,我们看到了非常多新的SDN 产品.体系结构.营销活动和各种会议,一些新的标准和开源组织也进入了这个领域.当时的SDN 刚刚从炒作周期的高点回归下来.转眼到了2014 年,这一年我们会看到 ...