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. 复习篇(一)Activity的生命周期和启动模式

    (一)关于<intent-filter>中的<data> 当设置<data>过滤器的时候,使用intent的时候必须要设置响应的匹配,否则无法匹配成功.不过不设置则 ...

  2. Objextive-C几道小题目笔记

    //掷骰子题,掷骰子100次,输出每个号出现的次数 void one() { for (int i=1; i<=100; i++) { int a = arc4random() % 6 +1; ...

  3. 【stm32】用TIM1产生6路ADC,用CCR4触发ADC1的注入通道采样

    这几天一直在使用STM32来写sensorless BLDC的驱动框架,那么必须会用到TIM1的CCR1/CCR2/CCR3产生的六路互补PWM,以及用CCR4来产生一个中断,用来在PWM-ON的时候 ...

  4. 你应该知道的CSS文字大小单位PX、EM、PT[转]

    摘要: 这里引用的是Jorux的“95%的中国网站需要重写CSS”的文章, 题目有点吓人,但是确实是现在国内网页制作方面的一些缺陷.我一直也搞不清楚px与em之间的关系和特点,看过以后确实收获很大.平 ...

  5. WAS

    http://pic.dhe.ibm.com/infocenter/wasinfo/v8r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Fin ...

  6. wafer

    Wafer Dicing:晶圆划片 wafer:晶圆 Wafer bumping:晶圆凸起 300mm wafer line:300mm晶圆线 wafer fabrication:晶圆加工 silic ...

  7. (八)boost库之异常处理

    (八)boost库之异常处理 当你面对上千万行的项目时,当看到系统输出了异常信息时,你是否想过,如果它能将文件名.行号等信息输出,该多好啊,曾经为此绞尽脑汁. 今天使用boost库,将轻松的解决这个问 ...

  8. Unix/Linux环境C编程入门教程(24) MySQL 5.7.4 for Red Hat Enterprise 7(RHEL7)的安装

    远观历史, MySQL的主要目的是为了能够在单处理器核心的商业服务器上运行.如今MySQL的一个变化用户可能不会注意到,那就是甲骨文已经开始重新架构MySQL的代码,使它大量的模块化.如软件解析器,优 ...

  9. linux命令之uname

    uname是linux中查询系统基本信息的命令. 命令形式: uname [选项] 选项包括:(若不跟任何选项:则默认-s选项) -s, --kernel-name 输出内核名称   -n, --no ...

  10. ngrok首页、文档和下载 - Web服务安全通道 - 开源中国社区

    ngrok首页.文档和下载 - Web服务安全通道 - 开源中国社区      Web服务安全通道 ngrok 编辑/纠错    分享到     新浪微博腾讯微博    已用    +0    收藏 ...