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. java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ex.activity/com.ex.activity.LoginActivity}: android.view.InflateException: Binary XML file line #1: Error inflating class

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ex.activity/com.ex.activity.L ...

  2. Kali Linux 新手折腾笔记

    http://defcon.cn/1618.html 2014年09月29日 渗透测试 暂无评论 阅读 55,052 次   最近在折腾Kali Linux 顺便做一简单整理,至于安装就不再多扯了,估 ...

  3. android textView 富文本显示

    String parenName = entity.getParent().getMember_nickname(); parantNameRich = "<font color='# ...

  4. Inno Setup使用上的几个问题 (转)

    Inno Setup使用上的几个问题: [问题一:Inno Setup 执行REG文件代码?][Run]Filename: "{win}\regedit.exe";Paramete ...

  5. grok 正则捕获(就是perl的正则捕获)

    2.3.2 grok 正则捕获: \s+ 和 [\n\t\r\f]+ 一样 1.命名分组格式为(?<grp name>),反向引用时用\k<grp name> 2.命名分组的匹 ...

  6. 四大图像库:OpenCV/FreeImage/CImg/CxImage

    1.对OpenCV 的印象:功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善,操作手册很详细,手册首先给大家补计算机视觉的知识,几乎涵盖了近10年内的主流算法: 然后将图像格式和矩阵运算, ...

  7. 重新mysql-server

    apt-get purge mysql-server │apt-get purge mysql-common │rm -rf /var/log/mysql │rm -rf /var/log/mysql ...

  8. 3、使用Lucene实现千度搜索

    1.新建Web项目 新建一个Web项目,我命名为SearchEngine,然后导入Java包: 除了上篇博客中的Jar包外,我还引入了 IKAnalyzer2012_FF.jar 包和struts2的 ...

  9. ubuntu下google 拼音输入法的安装

    google拼音输入法安装 (1).获代替码:(没有git的先安装git:sudoapt-get install git-core) $>gitclone git://github.com/tc ...

  10. OAuth2.0认证介绍

    OAuth2.0鉴权 返回 目录 [隐藏] 1 腾讯微博OAuth2.0认证介绍 2 获取accesstoken的两种方式 2.1 1.Authorization code grant 2.1.1 第 ...