Delphi启动/停止Windows服务,启动类型修改为"自动"

  1. unit U_StartServices;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, WinSVC, StdCtrls;
  6. type
  7. TForm1 = class(TForm)
  8. btn_StartServices: TButton;
  9. btn_StopServices: TButton;
  10. procedure btn_StartServicesClick(Sender: TObject);
  11. procedure btn_StopServicesClick(Sender: TObject);
  12. private
  13. { Private declarations }
  14. public
  15. { Public declarations }
  16. end;
  17. var
  18. Form1: TForm1;
  19. function StartServices(const SvrName: string): Boolean;
  20. implementation
  21. {$R *.dfm}
  22. //开启服务
  23. function StartServices(const SvrName: string): Boolean;
  24. var
  25. SCH, SvcSCH: SC_HANDLE;
  26. arg: PChar;
  27. dwStartType: DWORD;
  28. begin
  29. Result := False;
  30. SCH := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  31. if SCH <= 0 then Exit;
  32. SvcSCH := OpenService(SCH, PChar(SvrName), SERVICE_ALL_ACCESS);
  33. if (ChangeServiceConfig(
  34. SvcSCH, //   handle   of   service
  35. SERVICE_NO_CHANGE, //SERVICE_NO_CHANGE,   //   service   type:   no   change
  36. SERVICE_AUTO_START, //   change   service   start   type
  37. SERVICE_NO_CHANGE, //   error   control:   no   change
  38. nil, //   binary   path:   no   change
  39. nil, //   load   order   group:   no   change
  40. nil, //   tag   ID:   no   change
  41. nil, //   dependencies:   no   change
  42. nil, //   account   name:   no   change
  43. nil, //   password:   no   change
  44. nil)) then
  45. showmessage(‘Auto Start OK‘)
  46. else
  47. showmessage(‘Auto Start Error‘);
  48. if SvcSCH <= 0 then Exit;
  49. try
  50. Result := StartService(SvcSCH, 0, arg);
  51. CloseServiceHandle(SvcSCH);
  52. CloseServiceHandle(SCH);
  53. except
  54. CloseServiceHandle(SvcSCH);
  55. CloseServiceHandle(SCH);
  56. Exit;
  57. end;
  58. end;
  59. //停止服务
  60. function StopServices(const SvrName: string): Boolean;
  61. var
  62. SCH, SvcSCH: SC_HANDLE;
  63. SS: TServiceStatus;
  64. begin
  65. Result := False;
  66. SCH := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
  67. if SCH <= 0 then Exit;
  68. SvcSCH := OpenService(SCH, PChar(SvrName), SERVICE_ALL_ACCESS);
  69. if SvcSCH <= 0 then Exit;
  70. try
  71. Result := ControlService(SvcSCH, SERVICE_CONTROL_STOP, SS);
  72. CloseServiceHandle(SCH);
  73. CloseServiceHandle(SvcSCH);
  74. except
  75. CloseServiceHandle(SCH);
  76. CloseServiceHandle(SvcSCH);
  77. Exit;
  78. end;
  79. end;
  80. procedure TForm1.btn_StartServicesClick(Sender: TObject);
  81. begin
  82. if StartServices(‘PolicyAgent‘) = true then
  83. application.MessageBox(PChar(‘PolicyAgent 服务启动成功‘), PChar(‘服务信息‘), MB_ICONINFORMATION)
  84. else
  85. application.MessageBox(PChar(‘PolicyAgent 服务启动失败‘), PChar(‘服务信息‘), MB_ICONERROR);
  86. end;
  87. procedure TForm1.btn_StopServicesClick(Sender: TObject);
  88. begin
  89. if StopServices(‘PolicyAgent‘) = true then
  90. application.MessageBox(PChar(‘PolicyAgent 服务停止成功‘), PChar(‘服务信息‘), MB_ICONINFORMATION)
  91. else
  92. application.MessageBox(PChar(‘PolicyAgent 服务停止成功‘), PChar(‘服务信息‘), MB_ICONERROR);
  93. end;
  94. end.

复制代码

http://www.appweixin.net/thread-67-1-1.html

时间: 2024-10-12 04:02:08

Delphi启动/停止Windows服务,启动类型修改为"自动"的相关文章

玩转Windows服务系列&mdash;&mdash;Windows服务启动超时时间

最近有客户反映,机房出现断电情况,服务器的系统重新启动后,数据库服务自启动失败.第一次遇到这种情况,为了查看是不是断电情况导致数据库文件损坏,从客户的服务器拿到数据库的日志,进行分析. 数据库工作机制 要分析数据库启动失败的原因,首先说明一下数据库服务的工作机制. 数据库分为六大服务: 数据库的六大服务之间存在依赖关系,及启动流程: 服务自动启动失败原因 从客户那里,拿到了两份日志,一份是开机自启动的日志信息,此次数据库启动失败.另外一份是开机后,手动启动数据库服务的日志信息,此次数据库启动成功

在CentOS 7中启动/停止/重启服务

RHEL/CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Linux标准组的启动脚本. Systemd是一个Linux操作系统下的系统和服务管理器.它被设计成向后兼容SysV启动脚本,并提供了大量的特性,如开机时平行启动系统服务,按需启动守护进程,支持系统状态快照,或者基于依赖的服务控制逻辑. 先前的使用SysV初始化或Upstart的红帽企业版Linux版本

C#判断程序是由Windows服务启动还是用户启动

在Windows系统做网络开发,很多时候都是使用Windows服务的模式,但在调度阶段,我们更多的是使用控制台的模式.在开发程序的时候,我们在Program的Main入口进行判断.最初开始使用Environment.UserInteractive属性,在系统不系统服务的交互模式时,程序运行是正常的,但试过有Win7下,系统允许交互模式,结果在服务启动的时候,跳转到控制台的模式了,服务启动不起来.只能在服务的调用方式下带参数,然后在Main的参数中判断是否为服务方式.这在一般的情况下是可以解决问题

Linux Systemd——在RHEL/CentOS 7中启动/停止/重启服务

RHEL/CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Linux标准组的启动脚本. Systemd是一个Linux操作系统下的系统和服务管理器.它被设计成向后兼容SysV启动脚本,并提供了大量的特性,如开机时平行启动系统服务,按需启动守护进程,支持系统状态快照,或者基于依赖的服务控制逻辑. 先前的使用SysV初始化或Upstart的红帽企业版Linux版本

Windows下使用service.bat安装tomcat服务, 启动停止tomcat服务

在项目开发过程中,以前只是在MyEclipse中配置.启动.停止tomcat服务器 如果只想在机器中使用tomcat服务器,而不想安装MyEclipse,可以使用service.bat 将tomcat安装到计算机中的服务管理系统services.msc,就可以使用DOS命令启动或 停止tomcat服务. 一般在tomcat的bin目录下有service.bat文件,如果没有就去下载一个有此文件 的tomcat. 一.win + R.cmd.Enter    打开cmd窗口, 此时工作目录是在C盘

mongodb配置windows服务启动

第一步 下载MongoDB http://www.mongodb.org/downloads 第二步 解压到D:\mongodb\目录下,为了命令行的方便,可以把D:\mongodb\bin加到系统环境变量的path中了. 第三步 创建D:\mongodb\data\db以及D:\mongodb\logs\mongodb.log 第四步 启动MongoDB 命令提示符中  D:\mongodb\bin>mongod.exe --dbpath=d:\mongodb\data 第五步 安装WINDO

C# .net windows服务启动多个服务 ServiceBase

在windows服务中想要启动多个服务 ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { // new SyncService(), new DataMoveService(), }; ServiceBase.Run(ServicesToRun); 但是发现每次都只启动了数组中的第一个服务,其他服务的onstart方法都没有执行, 查找资料后发现,问题有两个 1.需要在ProjectInstaller中没有添加安装项

windows服务启动有界面的程序

大家写windows服务守护进程的时候,肯定会遇到启动的程序看不到界面,只能看到exe问题. 那么发现可能有如下情况 a.无论是开机,还是程序被关掉后,服务启动的程序只能看到exe,看不到界面; b.开机后,服务自动启动程序,只能看到进程里面有exe,看不到界面,但是杀掉进程重启后,能看到界面; 我来给出解决方法:1.服务中的启动程序代码用如下方法: string appStartPath = @"C:\Test.exe"; IntPtr userTokenHandle = IntPt

C# windows服务启动winform程序不显示UI问题解决

由于工作需要写一个解决winform程序自动更新下载重启的自动更新程序,之前用控制台全部实现,然而换成windows  service出现了两个问题,一个是路径问题(http://baidu.com),一个是服务启动其他winform程序不显示UI问题. 本篇解决UI显示问题. 以下为引用尤尼博文(原文地址:http://www.cnblogs.com/luxilin/p/3347212.html): 我开发的系统中有一接口程序(这里就称Task,是一个C#的Console Applicatio