mysql服务的注册,启动、停止、注销。 [delphi代码实现]
unit Service; interface uses Windows,Classes,SysUtils,Winsvc,winsock; Type {服务句柄信息} TScmInfo=Record HostName :String; DataBaseName:String; DesireAccess :DWORD; End; {服务信息} TSvcInfo=Record HscManager :Integer; ServerName :String; //服务名 DisplayName :String; //服务的显示名 DesireAccess :DWORD; // ServiceType :Dword; //服务的类别 StartType :Dword; //服务的启动方式 ErrorControl :Dword; //服务错误控制方式 BinaryPathName :String; //服务执行文件的具体路径 LoadOrderGroup :String; TagId :Dword; Dependencies :String; //依赖:有多个依赖的服务时,中间以空格隔开} ServerStartName :String; Password :String; End; //需要注册的服务信息数组 SvcArray=Array[..] of TSvcInfo; Type {服务控制类} TService=Class(TObject) Private Scm_Info :TScmInfo; Svc_Info :TSvcInfo; ScmHandle :Integer; {服务句柄} SvcHandle :Integer; Public Constructor Create(); Destructor Destroy();Override; Function SetScmInfo():Boolean; Function OpenScmHandle():Integer; Function SetServiceInfo(TmpSvc :TsvcInfo):Boolean; {建立一服务} Function CreateService0():Boolean; {删除一服务} Function Delete_AService(ServiceName :String):Boolean; {一服务} Function Open_Service(ServiceName :String):Boolean; {/////////////////////////////////////////////////////////////////////} {// 函数名称: IsSvcExists() {// 函数功能: 判断系统中相关的服务是否存在 {// 参数信息: 需要判断的服务名 {// 返回值: TRUE : WINDOWS 中的服务已存在,FALSE :WINDOWS 中的服务不存在 {// {/////////////////////////////////////////////////////////////////////} Function isSvcExists(ServiceName :string):Boolean; {/////////////////////////////////////////////////////////////////////////} {// 函数名称: Start_Service() Control_Service {// 函数功能: 启动相关的服务进程 {// 参数信息: 需要启动的服务名 {// 返回值: TRUE :服务已经启动;FALSE:服务启动失败; {/////////////////////////////////////////////////////////////////////////} Function Control_Service(ServiceName : String; controlType :integer):Boolean; {/////////////////////////////////////////////////////////////////////////} {// 函数名称: IsServiceStart() {// 函数功能: 判断服务是否启动 {// 参数信息: 需要判断的服务名 {// 返回值: TRUE :服务已经启动; FALSE :服务已停止 {/////////////////////////////////////////////////////////////////////////} Function IsServiceStart(ServiceName:String):Boolean; End; implementation { TService } constructor TService.Create; begin try ScmHandle :=; SetScmInfo(); ScmHandle:=OpenSCManager(PChar(Scm_Info.HostName),Nil,Scm_Info.DesireAccess); Except End; end; {建立一服务} function TService.CreateService0(): Boolean; Var i :Integer; b:SC_HANDLE; begin Try OpenScmHandle(); // svc_info.HscManager := ScmHandle; svc_info.HscManager:= OpenSCManager(nil,nil,SC_MANAGER_CREATE_SERVICE); Result :=False; // SvcHandle:= b:=CreateService(svc_Info.HscManager, Pchar(svc_Info.ServerName), Pchar(Svc_Info.DisplayName), SERVICE_ALL_ACCESS, // Svc_info.DesireAccess SERVICE_INTERACTIVE_PROCESS or SERVICE_WIN32_OWN_PROCESS, // svc_INfo.ServiceType, SERVICE_AUTO_START, // svc_INfo.ServiceType, SERVICE_ERROR_NORMAL, // Svc_Info.ErrorControl, pchar(Svc_Info.BinaryPathName), nil,nil,nil,nil,nil); { //原形 b:=CreateService(svc_Info.HscManager, Pchar(svc_Info.ServerName), Pchar(Svc_Info.DisplayName), Svc_info.DesireAccess, svc_INfo.ServiceType, Svc_Info.StartType , Svc_Info.ErrorControl, pchar(Svc_Info.BinaryPathName), pchar(''), LPDWORD(0), Pchar(Svc_Info.Dependencies), Pchar(Svc_info.ServerStartName), Pchar(Svc_Info.Password)); } // If SvcHandle <> 0 Then If b <> Then Begin Result :=True; CloseServiceHandle(SvcHandle); End ; I:=i+; Except End; end; {注销一服务} function TService.Delete_AService(ServiceName: String): Boolean; Var RHandle:Integer; rc :Boolean; begin Try OpenScmHandle(); Result :=False; If ScmHandle<> Then Begin RHandle :=OpenService(ScmHandle,PChar(ServiceName),SERVICE_ALL_ACCESS ); If RHandle <> Then Begin Rc :=DeleteService(Rhandle); Result :=Rc; {关闭句柄} CloseServiceHandle(RHandle); End Else Result :=True; End; Except End; end; destructor TService.Destroy; begin try CloseServiceHandle(ScmHandle); Except End; end; {打开数据库的句柄} function TService.isSvcExists(ServiceName: string): Boolean; Var RHandle:Integer; rc :Boolean; begin Try OpenScmHandle(); Result :=False; If ScmHandle<> Then Begin RHandle :=OpenService(ScmHandle,PChar(ServiceName),SERVICE_ALL_ACCESS ); If RHandle <> Then Begin Result :=true; {关闭句柄} CloseServiceHandle(RHandle); End; End; Except End; end; function TService.OpenScmHandle: Integer; begin try SetScmInfo(); Then CloseServiceHandle(ScmHandle); ScmHandle := ; ScmHandle :=OpenSCManager(PChar(Scm_Info.HostName),Nil,Scm_Info.DesireAccess); then ScmHandle :=OpenSCManager(PChar(Scm_Info.HostName),Nil,Scm_Info.DesireAccess); Except End; end; {打开一服务} function TService.Open_Service(ServiceName: String): Boolean; Var SHandle :Integer; begin Try Result :=False; sHandle := ; SHandle :=OpenScmHandle(); If SHandle<> Then Begin SvcHandle :=OpenService(SHandle,PChar(ServiceName),SERVICE_ALL_ACCESS ); If SvcHandle <> Then Result :=True; End; Except End; end; function TService.SetScmInfo(): Boolean; Var hostName : ..] of char; wsdata : TWSAData; begin try WSAStartup ($, wsdata); Result :=False; gethostname (hostName,sizeof(hostName)); If HostName ='' Then Exit; scm_Info.HostName :=HostName; Scm_Info.DesireAccess :=SC_MANAGER_ALL_ACCESS; Except End; end; //设置需要注册的WINDOWS 服务的具体信息 function TService.SetServiceInfo(TmpSvc: TsvcInfo): Boolean; begin try Result :=False; If ScmHandle > Then Begin Svc_Info :=TmpSvc; Svc_Info.HscManager :=ScmHandle; Result :=True; End; Except End; end; //控制WINDOWS 系统内部的服务 function TService.Control_Service(ServiceName: String;controlType : Integer): Boolean; Var RHandle:Integer; rc :Boolean; Rec_status :TServiceStatus; serviceArg :Pchar; i :Integer; begin i :=; serviceArg := Pchar(''); Try Result :=False; If ScmHandle <> Then Begin RHandle :=OpenService(ScmHandle,PChar(ServiceName),SERVICE_ALL_ACCESS ); If RHandle <> Then Begin Case controlType of : //启动服务器 Begin //ControlService(rHandle,SERVICE_CONTROL_START,rec_status); StartService(rHandle,,servicearg); i:=; While i< Do Begin QueryServiceStatus(RHandle,Rec_status); if rec_status.dwCurrentState =SERVICE_RUNNING then Begin result :=True; CloseServiceHandle(RHandle); Break; End; sleep(); i:=i+; End; End; : //暂停服务进程 Begin ControlService(rHandle,SERVICE_CONTROL_PAUSE,rec_status); i:=; While i< Do Begin QueryServiceStatus(RHandle,Rec_status); if rec_status.dwCurrentState =SERVICE_PAUSED then Begin result :=true; CloseServiceHandle(RHandle); Break; End; Sleep(); i:=i+; End; End; : //唤醒服务进程 Begin ControlService(rHandle,SERVICE_CONTROL_CONTINUE,rec_status); i:=; While i< do Begin QueryServiceStatus(RHandle,Rec_status); if rec_status.dwCurrentState =SERVICE_RUNNING then Begin result :=True; CloseServiceHandle(RHandle); Break; End; Sleep(); i:=i+; End; End; : //停止服务进程 begin ControlService(rHandle,SERVICE_CONTROL_STOP,rec_status); i:=; While i< Do Begin QueryServiceStatus(RHandle,Rec_status); if rec_status.dwCurrentState =SERVICE_STOPPED then Begin result :=True; CloseServiceHandle(RHandle); Break; End; Sleep(); i:=i+; End; End; : //关闭服务程序 SERVICE_CONTROL_SHUTDOWN Begin rec_status.dwCurrentState :=SERVICE_RUNNING; ControlService(rHandle,SERVICE_CONTROL_STOP,rec_status); i:=; While i< Do Begin QueryServiceStatus(RHandle,Rec_status); if rec_status.dwCurrentState =SERVICE_STOPPED then Begin result :=True; CloseServiceHandle(RHandle); Break; End; Sleep(); i:=i+; End; End; end; Result :=true; {关闭句柄} then CloseServiceHandle(RHandle); End; End; Except End; end; function TService.IsServiceStart(ServiceName: String): Boolean; Var RHandle:Integer; rc :Boolean; Rec_status :TServiceStatus; begin Try OpenScmHandle(); Result :=False; If ScmHandle<> Then Begin RHandle := ; RHandle :=OpenService(ScmHandle,PChar(ServiceName),SERVICE_ALL_ACCESS ); If RHandle <> Then Begin QueryServiceStatus(RHandle,Rec_status); if rec_status.dwCurrentState =SERVICE_RUNNING then result :=True; {关闭句柄} CloseServiceHandle(RHandle); End; End; Except End; end; end. 程序中使用 uses Service; ///*********************************** //注册 必须把my.ini放在 mysqld-nt.exe路径或者 系统windows 下 procedure TForm1.Button1Click(Sender: TObject); var s:TService; a:TScmInfo ; b:TSvcInfo; begin s:=TService.Create; b.ServerName :='mysql'; b.DisplayName :='sdfss'; b.BinaryPathName :='D:\APMXE5\mysql60\bin\mysqld-nt.exe'; //路径和exe文件 s.SetScmInfo ; s.SetServiceInfo(b); s.CreateService0; s.Destroy ; end; //****************** //运行 procedure TForm1.Button2Click(Sender: TObject); var s:TService; begin s:=TService.Create; s.Control_Service() ; s.Destroy ; end; //************** //停止 var s:TService; begin s:=TService.Create; s.Control_Service() ; s.Destroy ; end; //********************** 注销 procedure TForm1.Button4Click(Sender: TObject); var s:TService; begin s:=TService.Create; s.Delete_AService('mysql') ; s.Destroy ; end; 复制代码
http://www.cnblogs.com/jxgxy/archive/2010/07/23/1783735.html
mysql服务的注册,启动、停止、注销。 [delphi代码实现]的更多相关文章
- MySQL服务使用cmd启动与停止服务
MySQL未设置自动启动,在使用时需要手动打开服务,方法如下 mysql服务的启动: 以管理员的身份运行cmd命令窗口,输入命名 net start mysql 提示:必须使用管理员身份运行cmd 如 ...
- 彻底删除mysql服务(清理注册表)
由于安装某个项目的执行文件,提示要卸载MySQL以便它自身MySQL安装,然后我禁用了MYSQL服务,再把这个文件夹删除后,发现还是提示请卸载MYSQL服务. 解决步骤: 1.以管理员身份运行命令提示 ...
- WAMP中mysql服务突然无法启动 解决方法
wamp的mysql服务前两天还能用,今天突然不能无法启动了,原因可能是近期电脑强行关机,删除wamp\bin\mysql\mysql5.6.17\data目录下的ib_logfile0和ib_log ...
- MariaDB/MySql 服务消失无法启动
今天启动电脑打开数据库发现这么一个错误: 2003 can't connect to mysql server on localhost 10038 无奈去查看了服务,发现mysql服务消失了,猜 ...
- MySQL Install--CentOS 7配置MySQL服务和开启启动
创建MySQL服务 编辑文件: vim /usr/lib/systemd/system/mysql.service 录入下面内容: PS: 注意修改ExecStart脚本 [Unit]Descript ...
- 关于MySQL服务无法正常启动问题
使用mysql的时候,突然查看服务列表也找不到mysql服务 解决办法: 一.首先打开CMD,切换到MySql安装目录的MySql Server →bin目录下 运行如下命令(具体试个人安装的MySq ...
- mysql服务里面没有启动项
解决:5.0版本:开始->运行->cmd,进到mysql安装的bin目录D:\MySQL\bin>mysqld.exe -installService successfully in ...
- windows 下 mysql服务的注册和删除
注册: mysqld --install 服务名 --defaults-file="C:\Mysql\mysql-5.7\my.ini" 删除 sc delete 服务名 停止服务 ...
- windows 服务 安装 删除 启动 停止
一.停止 sc stop 服务名 二.删除 sc delete 服务名 注意:有时删除不了,报什么“服务为删除标识” ,请将服务窗口关掉就好了. 三.创建 sc create XmlcSendServ ...
随机推荐
- PowerShell 管道和对象成员
2.1 管道 在各种现代的shell中,均支持管道的概念. 管道的最大特点就是: 前一个命令的输出作为后一个命令的输入.cmd.bash均支持管道的概念,这里我就不多说了,下面我们说说PS中 管道 ...
- java获得指定日期的前一天,后一天的代码
/** * 获得指定日期的前一天 * @param specifiedDay * @return * @throws Exception */ public static String getSpec ...
- The Angles of a Triangle
The Angles of a Triangle You are given the lengths for each side on a triangle. You need to find all ...
- linux会话命令screen详解
Screen会话命令 我其实是把文件下载到 /home/zhang/temp/ 里面,当我N久以后再联上服务器,想看看文件下载情况怎样,那又要 cd 老半天,这时候 screen 就是好帮手了. 顾名 ...
- SQL查询最近三个月的数据(查询最近几天,几年等等)
定义和用法 :: 天,这样就可以找到付款日期. 我们使用如下 ,OrderDate) AS OrderPayDate FROM Orders 结果: OrderId OrderPayD ...
- OS error set
Failed to resolve/decode supposed IPv4 source addres Failed to resolve/decode supposed IPv4 source a ...
- C++ Primer笔记1_转义字符_标准库类型string_标准库类型vector
1.转义字符 一般有两种方式: \x后紧跟1个或多个十六进制数字.或\后紧跟1.2.3个八进制数字,当中数字部分是字符相应的数值. #include <iostream> using na ...
- Linux shell编程 4 ---- shell中的循环
1 for循环 1 for语句的结构 for variable in values; do statement done 2 for循环通常是用来处理一组值,这组值可以是任意的字符串的集合 3 for ...
- Android进程间通信(IPC)机制Binder简要介绍和学习计划
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6618363 在Android系统中,每一个应用 ...
- Android应用程序资源的查找过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8806798 我们知道,在Android系统中, ...