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. 轻松搞定Ajax(分享下自己封装ajax函数,其实Ajax使用很简单,难是难在你得到数据后来怎样去使用这些数据)

    hey,guys!今天我们一起讨论下ajax吧!此文只适合有一定ajax基础,但还是模糊状态的同志,当然高手也可以略过~~~ 一.概念 Ajax(Asynchronous Javascript + X ...

  2. Change the ball--hdu2277

    Change the ball Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  3. codeforces 518A. Vitaly and Strings

    A. Vitaly and Strings time limit per test 1 second memory limit per test 256 megabytes input standar ...

  4. windows程序设计读书笔记1——创建窗口

    第一个win32程序,简单的创建窗口: #include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ...

  5. QString转LPCWSTR

    QFileInfo info("./records.db"); std::string str = info.absoluteFilePath().toStdString(); / ...

  6. opencv菜鸟学习之旅cvNorm

    Norm 计算数组的绝对范数, 绝对差分范数或者相对差分范数 double cvNorm( const CvArr* arr1, const CvArr* arr2=NULL, int norm_ty ...

  7. filestream streamreader

    filestream是一个读取文件的stream,其本身也是支持read和write的,负责的对文件的读与写,而streamreader则是建立在对流的基础上的读,同时还有streamwrite ht ...

  8. (三)Boost库之字符串处理

    (三)Boost库之字符串处理 字符串处理一直是c/c++的弱项,string_algo库很好的弥补了这一点. string_algo 库算法命名规则: 前缀i    : 有这个前缀表名算法的大小写不 ...

  9. python编辑器对比和推荐

    python编辑器对比和推荐   我先给一个初步的表格吧,大家如果有什么意见,或有补充,欢迎提出.有些我没有用过,先不写了.以下是我使用过的python IDE: 除了PythonWin, Visua ...

  10. hdu 5615 Jam's math problem(判断是否能合并多项式)

    方法一:由十字相乘相关理论我们能知道,如果要有p,k,q,m,那么首先要有解,所以b*b-4*a*c要>0,然而因为p,k,q,m是正整数,所以代表x1,x2都是有理数,有理数是什么鬼呢?就是解 ...