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. 初识HTML5

    1, 新增canvas标签,允许通过JS在客户端完成2D绘图 2, 新增Video/Audio标签,能取代flash实现媒体播放 3, 新增本地存储功能:localStorage/sessionSto ...

  2. Leetcode算法刷题:第112题 Path Sum

    Path Sum 题目 给予一个二叉树,和一个值su,寻找是否有一个从根节点到叶节点的和为su,有则返回True,没有为False.比如: 5 / \ 4 8 / / \ 11 13 4 / \ \ ...

  3. UVA 1839 Alignment

    还是最长上升子序列... 本题是求队列中任一士兵都能从左边或者右边看到队伍外: 即某一士兵左边为上升子序列,右边为下降子序列.求两个序列和,再用总数减去: #include <iostream& ...

  4. The package does not support the device architecture (x86). You can change the supported architectures in the Android Build section of the Project Opt

    The package does not support the device architecture (x86). You can change the supported architectur ...

  5. Windows Components Reference(Windows组件参考)

    原文 http://www.msfn.org/board/topic/127287-windows-components-reference/ green means the component na ...

  6. [置顶] access函数-linux

    表头文件 #include<unistd.h> 定义函数 int access(const char * pathname, int mode); 函数说明 检查是否可以读/写某一已存在的 ...

  7. 不是技术牛人,如何拿到国内IT巨头的Offer

    原地址:http://blog.csdn.net/lsldd/article/details/13506263 不久前,byvoid面阿里星计划的面试结果截图泄漏,引起无数IT屌丝的羡慕敬仰.看看这些 ...

  8. poj3624 简单的01背包问题

    问题描述: 总共有N种宝石供挑选,宝石i的重量为Wi,吸引力为Di,只可以用一次.Bessie最多可负担的宝石手镯总重量为M.给出N,M,Wi,Di,求M. 非常标准的01背包问题.使用了优化的一维数 ...

  9. 【HDU 4463 Outlets】最小生成树(prim,kruscal都可)

    以(x,y)坐标的形式给出n个点,修建若干条路使得所有点连通(其中有两个给出的特殊点必须相邻),求所有路的总长度的最小值. 因对所修的路的形状没有限制,所以可看成带权无向完全图,边权值为两点间距离.因 ...

  10. hdu 5501 The Highest Mark(贪心+01背包)

    题意:类似cf的赛制,每道题目有A,B,C三个值,A表示初始分数,B表示每分钟题的分数会减少B,C表示做这道题需要C分钟,数据保证分数不会变为负数.现在给出比赛时长,问安排做题的顺序,求最大得分. 思 ...