mysql服务的注册,启动、停止、注销。 [delphi代码实现]
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->mysql服务的注册,启动、停止、注销。 unit Service; interface uses Windows,Classes,SysUtils,Winsvc,winsock; Type{服务句柄信息}TScmInfo=RecordHostName :String;DataBaseName:String;DesireAccess :DWORD;End;{服务信息}TSvcInfo=RecordHscManager :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[1..20] of TSvcInfo;Type{服务控制类}TService=Class(TObject)PrivateScm_Info :TScmInfo;Svc_Info :TSvcInfo;ScmHandle :Integer;{服务句柄}SvcHandle :Integer;PublicConstructor 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; begintryScmHandle :=0;SetScmInfo();ScmHandle:=OpenSCManager(PChar(Scm_Info.HostName),Nil,Scm_Info.DesireAccess);ExceptEnd; end;{建立一服务} function TService.CreateService0(): Boolean; Var i :Integer; b:SC_HANDLE; beginTryOpenScmHandle(); // 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.DesireAccessSERVICE_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 ThenIf b <> 0 ThenBeginResult :=True;CloseServiceHandle(SvcHandle);End ;I:=i+1;ExceptEnd; end;{注销一服务} function TService.Delete_AService(ServiceName: String): Boolean; Var RHandle:Integer; rc :Boolean; beginTryOpenScmHandle();Result :=False;If ScmHandle<>0 ThenBeginRHandle :=OpenService(ScmHandle,PChar(ServiceName),SERVICE_ALL_ACCESS );If RHandle <>0 ThenBeginRc :=DeleteService(Rhandle);Result :=Rc;{关闭句柄}CloseServiceHandle(RHandle);End Else Result :=True;End;ExceptEnd; end;destructor TService.Destroy; begintryCloseServiceHandle(ScmHandle);Except End; end;{打开数据库的句柄} function TService.isSvcExists(ServiceName: string): Boolean; Var RHandle:Integer;rc :Boolean; beginTryOpenScmHandle();Result :=False;If ScmHandle<>0 ThenBeginRHandle :=OpenService(ScmHandle,PChar(ServiceName),SERVICE_ALL_ACCESS );If RHandle <>0 ThenBeginResult :=true;{关闭句柄}CloseServiceHandle(RHandle);End;End;ExceptEnd; end;function TService.OpenScmHandle: Integer; begintrySetScmInfo();if ScmHandle <>0 Then CloseServiceHandle(ScmHandle);ScmHandle := 0;ScmHandle :=OpenSCManager(PChar(Scm_Info.HostName),Nil,Scm_Info.DesireAccess);if ScmHandle = 0 thenScmHandle :=OpenSCManager(PChar(Scm_Info.HostName),Nil,Scm_Info.DesireAccess);ExceptEnd; end;{打开一服务} function TService.Open_Service(ServiceName: String): Boolean; VarSHandle :Integer; beginTryResult :=False;sHandle := 0;SHandle :=OpenScmHandle();If SHandle<>0 ThenBeginSvcHandle :=OpenService(SHandle,PChar(ServiceName),SERVICE_ALL_ACCESS );If SvcHandle <>0 Then Result :=True;End;ExceptEnd;end;function TService.SetScmInfo(): Boolean; VarhostName : array [0..255] of char;wsdata : TWSAData; begintryWSAStartup ($0101, wsdata);Result :=False;gethostname (hostName,sizeof(hostName));If HostName ='' ThenExit;scm_Info.HostName :=HostName;Scm_Info.DesireAccess :=SC_MANAGER_ALL_ACCESS;ExceptEnd;end;//设置需要注册的WINDOWS 服务的具体信息 function TService.SetServiceInfo(TmpSvc: TsvcInfo): Boolean; begintryResult :=False;If ScmHandle >0 ThenBeginSvc_Info :=TmpSvc;Svc_Info.HscManager :=ScmHandle;Result :=True;End;ExceptEnd; end; //控制WINDOWS 系统内部的服务function TService.Control_Service(ServiceName: String;controlType : Integer): Boolean; VarRHandle:Integer;rc :Boolean;Rec_status :TServiceStatus;serviceArg :Pchar;i :Integer;begini :=0;serviceArg := Pchar('');TryResult :=False;If ScmHandle <>0 ThenBeginRHandle :=OpenService(ScmHandle,PChar(ServiceName),SERVICE_ALL_ACCESS );If RHandle <>0 ThenBeginCase controlType of1: //启动服务器Begin//ControlService(rHandle,SERVICE_CONTROL_START,rec_status);StartService(rHandle,0,servicearg);i:=0;While i<30 DoBeginQueryServiceStatus(RHandle,Rec_status);if rec_status.dwCurrentState =SERVICE_RUNNING thenBeginresult :=True;CloseServiceHandle(RHandle);Break;End;sleep(1000);i:=i+1;End;End;2: //暂停服务进程BeginControlService(rHandle,SERVICE_CONTROL_PAUSE,rec_status);i:=0;While i<30 DoBeginQueryServiceStatus(RHandle,Rec_status);if rec_status.dwCurrentState =SERVICE_PAUSED thenBeginresult :=true;CloseServiceHandle(RHandle);Break;End;Sleep(1000);i:=i+1;End;End;3: //唤醒服务进程BeginControlService(rHandle,SERVICE_CONTROL_CONTINUE,rec_status);i:=0;While i<30 doBeginQueryServiceStatus(RHandle,Rec_status);if rec_status.dwCurrentState =SERVICE_RUNNING thenBeginresult :=True;CloseServiceHandle(RHandle);Break;End;Sleep(1000);i:=i+1;End;End;4: //停止服务进程beginControlService(rHandle,SERVICE_CONTROL_STOP,rec_status);i:=0;While i<30 DoBeginQueryServiceStatus(RHandle,Rec_status);if rec_status.dwCurrentState =SERVICE_STOPPED thenBeginresult :=True;CloseServiceHandle(RHandle);Break;End;Sleep(1000);i:=i+1;End;End;5: //关闭服务程序 SERVICE_CONTROL_SHUTDOWNBeginrec_status.dwCurrentState :=SERVICE_RUNNING;ControlService(rHandle,SERVICE_CONTROL_STOP,rec_status);i:=0;While i<30 DoBeginQueryServiceStatus(RHandle,Rec_status);if rec_status.dwCurrentState =SERVICE_STOPPED thenBeginresult :=True;CloseServiceHandle(RHandle);Break;End;Sleep(1000);i:=i+1;End;End;end;Result :=true;{关闭句柄}if rHandle <> 0 thenCloseServiceHandle(RHandle);End;End;ExceptEnd; end;function TService.IsServiceStart(ServiceName: String): Boolean; VarRHandle:Integer;rc :Boolean;Rec_status :TServiceStatus; beginTryOpenScmHandle();Result :=False;If ScmHandle<>0 ThenBeginRHandle := 0;RHandle :=OpenService(ScmHandle,PChar(ServiceName),SERVICE_ALL_ACCESS );If RHandle <>0 ThenBeginQueryServiceStatus(RHandle,Rec_status);if rec_status.dwCurrentState =SERVICE_RUNNING thenresult :=True;{关闭句柄}CloseServiceHandle(RHandle);End;End;ExceptEnd; 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('mysql',1) ; s.Destroy ; end;//************** //停止 var s:TService; begin s:=TService.Create; s.Control_Service('mysql',4) ; s.Destroy ; end;//********************** 注销 procedure TForm1.Button4Click(Sender: TObject); var s:TService; begin s:=TService.Create; s.Delete_AService('mysql') ; s.Destroy ; end;
转载于:https://www.cnblogs.com/china1/p/3395153.html
mysql服务的注册,启动、停止、注销。 [delphi代码实现]相关推荐
- 注册表中注销mysql服务器,彻底删除mysql服务(清理注册表)
由于安装某个项目的执行文件,提示要卸载MySQL以便它自身MySQL安装,然后我禁用了MYSQL服务,再把这个文件夹删除后,发现还是提示请卸载MYSQL服务. 解决步骤: 1.以管理员身份运行命令提示 ...
- wamp mysql 没有启动,WAMP中mysql服务突然无法启动 解决方法
wamp的mysql服务前两天还能用,今天突然不能无法启动了,原因可能是近期电脑强行关机,删除wamp\bin\mysql\mysql5.6.17\data目录下的ib_logfile0和ib_log ...
- 在Linux下如何启动MySQL服务_怎样在linux下启动mysql服务-linux下启动mysql服务的方法 - 河东软件园...
近几日有用户在向小编询问,在linux系统下安装了Mysql数据库,软件是顺利安装了,可是不知道如何进行Mysql的相关配置才能使mysql服务的相关启动及停止操作.Mysql是目前比较流行的数据库了 ...
- 本地计算机上的mysql服务怎么注册,本地计算机上的mysql服务启动后中止
解决方案mysql 1.首先,你须要把原来的服务删除,使用管理者权限启动cmd,并进入对应的mysql/bin文件夹中:sql mysqld --remove mysql 2.mysql的根目录下: ...
- MariaDB/MySql 服务消失无法启动
今天启动电脑打开数据库发现这么一个错误: 2003 can't connect to mysql server on localhost 10038 无奈去查看了服务,发现mysql服务消失了,猜测 ...
- MySQL服务无法正常启动的解决方法(1053错误)
今天我重启了服务器,这下杯具了.mysql一直报1053错误:服务没有及时响应启动或控制请求.我用结束进城和重启服务器方法都无法正常启动.重装MySQL服务重启之后依然无法启动. 我查了一些资料,用管 ...
- win10 mysql服务无法正常启动
刚开始在cmd打开mysql服务时,出现了以下情况 查找资料后发现需要用管理员身份打开cmd, 参考网址如下 https://blog.csdn.net/yhj19920417/article/det ...
- kill all mysql_killall mysql服务 mysql服务后无法启动
Can"t init tc log Aborting | mysql事务日志导致启动失败问题,killall mysql进程后,mysql无法启动问题总汇: 问题1: 将mysql所有进程 ...
- c#启动mysql数据库服务器_C#启动停止SQL数据库服务
方法二:通过C#代码实现: using System; using System.Windows.Forms; using System.ServiceProcess; class Test : Fo ...
最新文章
- 使用编译器——Solidity中文文档(8)
- 找回丢失的mysql root 用户密码
- 如何成为一个设计师和程序员混合型人才
- android 进度条 代码,Android进度条ProgressBar的实现代码
- 如何使用UI技术提升租房类APP的看房体验?
- 深入理解Javascript闭包
- ES6解决了什么问题
- LVIS挑战赛冠军总结 | 视觉任务中长尾分布问题研究进展与挑战
- 多视角半监督学习:从文本数据中得到不同视角
- matlab数据点降噪,matlab学习之降噪平滑算法
- onenote组织知识体系_我们的家人教给我们有关组织生活的知识
- 【MySQL】MySQL 如何查看sql语句执行时间和效率
- Spring字段注入
- HBase安装配置及测试
- VUE提示Gradient has outdated direction syntax
- 使用PING测试IP地址
- skywalking-介绍
- mysql使用jdbc进行批量插入时把事务设为手动提交比事务自动提交速度快了10倍
- 计算机启动突然断电,电脑启动运行过程主机突然断电怎么办
- Idel中maven全局配置
热门文章
- Codeforces Round #532(Div. 2) B.Build a Contest
- 【Ian Goodfellow 强推】GAN 进展跟踪 10 大论文(附下载)
- 实现WebSocket和WAMP协议的开源库WampSharp
- Android-第三天
- 网站前端和后台性能优化的34条经验和方法
- 【重点!DP】LeetCode 97. Interleaving String
- LeetCode 150. Evaluate Reverse Polish Notation
- 关于样本量的快速证明
- 栈--进栈,出栈指针修改的顺序问题
- 【Oracle】SQLPLUS命令