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 ...
随机推荐
- java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ex.activity/com.ex.activity.LoginActivity}: android.view.InflateException: Binary XML file line #1: Error inflating class
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ex.activity/com.ex.activity.L ...
- Kali Linux 新手折腾笔记
http://defcon.cn/1618.html 2014年09月29日 渗透测试 暂无评论 阅读 55,052 次 最近在折腾Kali Linux 顺便做一简单整理,至于安装就不再多扯了,估 ...
- android textView 富文本显示
String parenName = entity.getParent().getMember_nickname(); parantNameRich = "<font color='# ...
- Inno Setup使用上的几个问题 (转)
Inno Setup使用上的几个问题: [问题一:Inno Setup 执行REG文件代码?][Run]Filename: "{win}\regedit.exe";Paramete ...
- grok 正则捕获(就是perl的正则捕获)
2.3.2 grok 正则捕获: \s+ 和 [\n\t\r\f]+ 一样 1.命名分组格式为(?<grp name>),反向引用时用\k<grp name> 2.命名分组的匹 ...
- 四大图像库:OpenCV/FreeImage/CImg/CxImage
1.对OpenCV 的印象:功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善,操作手册很详细,手册首先给大家补计算机视觉的知识,几乎涵盖了近10年内的主流算法: 然后将图像格式和矩阵运算, ...
- 重新mysql-server
apt-get purge mysql-server │apt-get purge mysql-common │rm -rf /var/log/mysql │rm -rf /var/log/mysql ...
- 3、使用Lucene实现千度搜索
1.新建Web项目 新建一个Web项目,我命名为SearchEngine,然后导入Java包: 除了上篇博客中的Jar包外,我还引入了 IKAnalyzer2012_FF.jar 包和struts2的 ...
- ubuntu下google 拼音输入法的安装
google拼音输入法安装 (1).获代替码:(没有git的先安装git:sudoapt-get install git-core) $>gitclone git://github.com/tc ...
- OAuth2.0认证介绍
OAuth2.0鉴权 返回 目录 [隐藏] 1 腾讯微博OAuth2.0认证介绍 2 获取accesstoken的两种方式 2.1 1.Authorization code grant 2.1.1 第 ...