Delphi 服务操作
- unit Service;
- 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(服务名);
http://blog.csdn.net/yanjiaye520/article/details/7840911
Delphi 服务操作的更多相关文章
- delphi xe10 手机程序事件服务操作、退出键操作
//程序事件服务操作 var FMXApplicationEventService: IFMXApplicationEventService; begin if TPlatformServices.C ...
- Delphi服务端和PHP客户端通过Socket通信
在开始之前看下效果 PHP页面作为客户端发送请求给作为服务端的Delphi应用程序 PHP客户端页面打开如下 Delphi服务端应用程序打开如下 每次PHP页面刷新一下,Delphi的文本框都显示&q ...
- 【C#】分享基于Win32 API的服务操作类(解决ManagedInstallerClass.InstallHelper不能带参数安装的问题)
注:这里的服务是指Windows 服务. ------------------201508250915更新------------------ 刚刚得知TransactedInstaller类是支持带 ...
- Delphi Excel 操作大全
Delphi Excel 操作大全 (一) 使用动态创建的方法首先创建 Excel 对象,使用ComObj:var ExcelApp: Variant;ExcelApp := CreateOleObj ...
- delphi 换行操作 Word
delphi 换行操作 我将我的商用<旅行社管理系统>的 发团通知 部分奉献给您,望对您有所帮助. procedure TFrmMain.N327Click(Sender: TObject ...
- Dynamics AX 2012 R2 在增强入站端口中找不到自定义服务操作
Reinhard写好自定义服务A,添加好服务操作A1,A2,A3..... 然后,Reinhard在增强的入站端口,选择服务操作时,却找不到这些A1,A2,A3. 查找相关资料 ...
- Delphi摄像头操作
/*Title:Delphi摄像头操作 *Author:Insun *Blog:http://yxmhero1989.blog.163.com *From:www.4safer.com */ 为了笔耕 ...
- Delphi内存操作API函数(备查,并一一学习)
Delphi内存操作API函数System.IsMemoryManagerSet;System.Move;System.New;System.ReallocMem;System.ReallocMemo ...
- WCF 客户端调用服务操作的两种方法
本节的主要内容:1.通过代理类的方式调用服务操作.2.通过通道的方式调用服务操作.3.代码下载 一.通过代理类的方式调用服务操作(两种方式添加代理类) 1.手动编写代理类,如下: 客户端契约: usi ...
随机推荐
- Android 6.0权限问题
Android 6.0 open failed: EACCES (Permission denied) 对于6.0+权限问题,报错如上: 解决方案: Android 6.0 (Marshmallow) ...
- TextArea里Placeholder换行问题
页面上使用TextArea控件时,会时不时的想给个提示,比如按照一定方式操作之类的.正常情况下,会使用Placeholder,但这样的提示是不会换行的,无论是用\r\n,还是用<br/>, ...
- python实现zabbix_sender的socket通信代码样例
sk = socket.socket() sk.connect(self.ip_port) sk.settimeout(5) sk.sendall(b'ZBXD\x01') sk.sendall(b' ...
- C语言基础06
函数: 一组特定功能的代码段,之所以使用函数,为了在文件多处需要同一段代码时可以多次重复利用,减少代码冗余. //函数的声明 返回值类型 函数名称 ( 数据类型 形参1,数据类型 ,形参2 ) ; / ...
- Java GC机制和对象Finalize方法的一点总结
GC是垃圾收集的意思(Garbage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超 ...
- Spring中的DataBinding(二) - Validation
@Controller@RequestMapping(value = "/custom/register")public class RegistrationController ...
- 解决Java调用Azure SDK证书错误javax.net.ssl.SSLHandshakeException
Azure作为微软的公有云平台,提供了非常丰富的SDK和API让开发人员可以非常方便的调用的各项服务,目前除了自家的.NET, Java, Python, nodeJS, Ruby,PHP等语言都提供 ...
- Nginx 变量漫谈(四)
在设置了“取处理程序”的情况下,Nginx 变量也可以选择将其值容器用作缓存,这样在多次读取变量的时候,就只需要调用“取处理程序”计算一次.我们下面就来看一个这样的例子: map $args ...
- android 手势滑动
1.概述, 两次都是画曲线统计图用到手势滑动.左滑动,右滑动曲线图翻页 2.直接上代码 3.注: 第一次使用的时候是implement了 OnTouchListener 接口,是在画图布局上layou ...
- 使用AES加密的帮助类
在开发中经常使用加密/解密对一些内容进行处理,比如密码在存入数据库之前先经过加密处理等等,这里就把一个加密帮助类代码贴出来,供以后查找使用. 这个帮助类主要功能是对字符串和字节数组进行加密解密处理. ...