使用delphi新建服务,停止系统服务,以及获取服务状态和新建系统服务器的方法
2012-12-05 21:23
519 查看
bianxie
本文主要讲解了如何使用delphi新建服务,停止系统服务,以及获取服务状态和新建系统服务器的方法,以下是关键代码: unit Servicescontrol; interface uses Windows,Messages,SysUtils,Winsvc,Dialogs; function StartServices(Const SvrName:String):Boolean; function StopServices(Const SvrName:String):Boolean; function QueryServiceStatu(Const SvrName: String):String; function CreateServices(Const SvrName,FilePath:String):Boolean; function DeleteServices(Const SvrName: String):Boolean; implementation //开启服务 function StartServices(Const SvrName: String): Boolean; var a,b:SC_HANDLE; c:PChar; begin Result:=False; a:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS); if a <=0 then Exit; b:=OpenService(a,PChar(SvrName),SERVICE_ALL_ACCESS); if b <=0 then Exit; try Result:=StartService(b,0,c); CloseServiceHandle(b); CloseServiceHandle(a); except CloseServiceHandle(b); CloseServiceHandle(a); Exit; end; end; //停止服务 function StopServices(Const SvrName: String): Boolean; var a,b: SC_HANDLE; d: TServiceStatus; begin Result := False; a :=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS); if a <=0 then Exit; b:=OpenService(a,PChar(SvrName),SERVICE_ALL_ACCESS); if b <=0 then Exit; try Result:=ControlService(b,SERVICE_CONTROL_STOP,d); CloseServiceHandle(a); CloseServiceHandle(b); except CloseServiceHandle(a); CloseServiceHandle(b); Exit; end; end; //查询当前服务的状态 function QueryServiceStatu(Const SvrName: String): String; var a,b: SC_HANDLE; d: TServiceStatus; begin Result := '未安装'; a := OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS); if a <=0 then Exit; b := OpenService(a,PChar(SvrName),SERVICE_ALL_ACCESS); if b <= 0 then Exit; try QueryServiceStatus(b,d); if d.dwCurrentState = SERVICE_RUNNING then Result := '启动' //Run else if d.dwCurrentState = SERVICE_RUNNING then Result := 'Wait' //Runing else if d.dwCurrentState = SERVICE_START_PENDING then Result := 'Wait' //Pause else if d.dwCurrentState = SERVICE_STOP_PENDING then Result := '停止' //Pause else if d.dwCurrentState = SERVICE_PAUSED then Result := '暂停' //Pause else if d.dwCurrentState = SERVICE_STOPPED then Result := '停止' //Stop else if d.dwCurrentState = SERVICE_CONTINUE_PENDING then Result := 'Wait' //Pause else if d.dwCurrentState = SERVICE_PAUSE_PENDING then Result := 'Wait'; //Pause CloseServiceHandle(a); CloseServiceHandle(b); except CloseServiceHandle(a); CloseServiceHandle(b); Exit; end; end; {建立服务} function CreateServices(Const SvrName,FilePath: String): Boolean; var a,b:SC_HANDLE; begin Result:=False; if FilePath ='' then Exit; a := OpenSCManager(nil,nil,SC_MANAGER_CREATE_SERVICE); if a <= 0 then Exit; try b := CreateService(a,PChar(SvrName), PChar(SvrName), SERVICE_ALL_ACCESS, SERVICE_INTERACTIVE_PROCESS or SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START,SERVICE_ERROR_NORMAL, PChar(FilePath),nil,nil,nil,nil,nil); if b <= 0 then begin ShowMessage( SysErrorMessage( GetlastError )); Exit; end; CloseServiceHandle(a); CloseServiceHandle(b); Result := True; except CloseServiceHandle(a); CloseServiceHandle(b); Exit; end; end; {卸载服务} function DeleteServices(Const SvrName: String): Boolean; var a,b:SC_HANDLE; begin Result:=False; a := OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS); if a <= 0 then Exit; b :=OpenService(a,PChar(SvrName),STANDARD_RIGHTS_REQUIRED); if b <= 0 then Exit; try Result := DeleteService(b); if not Result then ShowMessage(SysErrorMessage(GetlastError)); CloseServiceHandle(b); CloseServiceHandle(a); except CloseServiceHandle(b); CloseServiceHandle(a); Exit; end; end; end. 调用方法: {启动服务} StartServices(服务名); {停止服务} StopServices(服务名); {新建服务} CreateServices(服务名,exe文件路径); {删除服务} DeleteServices(服务名); {获取服务状态} string:=QueryServiceStatu(服务名);
相关文章推荐
- JAVA获取JVM内存使用以及服务器CPU,硬盘使用方法
- delphi编程启动服务停止服务新建服务的方法
- Android程序:使用系统服务*1.获取网络状态 * 2.打开关闭wifi * 3.获取系统音量 * 4.获取运行程序的包名
- 使用Nmap获取目标服务器开放的服务以及操作系统信息
- 系统进程与线程关系以及使用Python获取的方法
- 获取linux系统的各服务进程与CPU、内存、硬盘空间使用状态
- PowerShell脚本远程获取多台服务器系统状态(CPU、内存、运行服务)
- "无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动"问题解决方法
- 另一种获取系统服务描述表入口地址的方法
- 当Dao层继承了HibernateDaoSupport,使用底层SQL语句,session获取的方法,以及解决关联查询no session的问题
- Powershell获取系统中所有可停止的服务
- MYSQL中自增列,默认值以及系统时间的使用方法(原创)
- 使用ajax后获取元素的方法以及事件委托的使用
- 使用PHP获取当前url路径的函数以及服务器变量
- 通过服务器获取终端上应用软件更新数据的方法和系统
- 停止DriverGenius Core Service系统服务的方法
- 使用jquery获取url以及jquery获取url参数的方法
- 本附录介绍iOS系统包含的框架,它们为编写iOS平台的软件提供必要的接口。下面的表格尽可能地列出框架中的类、方法、函数、类型以及常量使用的关键前缀,请避免在您的符号名称中使用这些前缀。
- 获取网络状态以及Fragment的隐藏和显示使用