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 ...
随机推荐
- YUV422 YUV420 Planar \ Semi-Planar \ Interleaved
关于yuv 格式 YUV 格式通常有两大类:打包(packed)格式和平面(planar)格式.前者将 YUV 分量存放在同一个数组中,通常是几个相邻的像素组成一个宏像素(macro-pixel);而 ...
- jQuery 方法
方法 描述 animate() 对被选元素应用"自定义"的动画 clearQueue() 对被选元素移除所有排队函数(仍未运行的) delay() 对被选元素的所有排队函数(仍未运 ...
- 使用notepad++学习python爬虫,print网页中文乱码问题
今天学习使用python爬虫的时候发现爬到的网页中文会乱码,一直网上搜索解决办法,一个一个试验过去,发现还是乱码,然后我就开始使用其它方法测试,用python自带的编辑器打开是正常的,发现是notep ...
- bokeh-scala
使用bokeh-scala进行数据可视化 目录 前言 bokeh简介及胡扯 bokeh-scala基本代码 我的封装 总结 一.前言 最近在使用spark集群以及geotrellis框架(相关文章见h ...
- android 手势滑动
1.概述, 两次都是画曲线统计图用到手势滑动.左滑动,右滑动曲线图翻页 2.直接上代码 3.注: 第一次使用的时候是implement了 OnTouchListener 接口,是在画图布局上layou ...
- 【stm32】实现STM32的串口数据发送和printf函数重定向
在调试电机驱动程序的时候,是不能随便利用中断来进行一些寄存器或数据的查看的,不然你在运行的时候突然来一下,如果占空比大的话那可能直接就把MOS管给烧了,所以我们很多情况下只能使用USART(串口)来进 ...
- js的框架
Ember.js的一些学习总结 1.1.1 摘要 现在,我们经常都可以看到复杂的JavaScript应用程序,由于这些应用程序变得越来越复杂,一长串的jQuery回调语句或者通过应用程序在各个状态 ...
- Qt :非window子窗体的透明度设置
✿问题的由来 心血来潮,想利用QTimer 配合 setWindowOpacity()方法来实现一个窗体淡入的效果. ✿实验代码 粗糙的实验代码: void Widge ...
- jdk1.6下载页面
http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-41940 ...
- 2014.06.20 (转)IEEE与论坛灌水
转自"饮水思源" 电子类学生大都知道IEEE, 这个IEEE就像一个大的BBS论坛,而这个协会下面有很多杂志,比如图像处理,信号处理,微波技术等.这些杂志就是论坛下的分版 ...