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代码实现]相关推荐

  1. 注册表中注销mysql服务器,彻底删除mysql服务(清理注册表)

    由于安装某个项目的执行文件,提示要卸载MySQL以便它自身MySQL安装,然后我禁用了MYSQL服务,再把这个文件夹删除后,发现还是提示请卸载MYSQL服务. 解决步骤: 1.以管理员身份运行命令提示 ...

  2. wamp mysql 没有启动,WAMP中mysql服务突然无法启动 解决方法

    wamp的mysql服务前两天还能用,今天突然不能无法启动了,原因可能是近期电脑强行关机,删除wamp\bin\mysql\mysql5.6.17\data目录下的ib_logfile0和ib_log ...

  3. 在Linux下如何启动MySQL服务_怎样在linux下启动mysql服务-linux下启动mysql服务的方法 - 河东软件园...

    近几日有用户在向小编询问,在linux系统下安装了Mysql数据库,软件是顺利安装了,可是不知道如何进行Mysql的相关配置才能使mysql服务的相关启动及停止操作.Mysql是目前比较流行的数据库了 ...

  4. 本地计算机上的mysql服务怎么注册,本地计算机上的mysql服务启动后中止

    解决方案mysql 1.首先,你须要把原来的服务删除,使用管理者权限启动cmd,并进入对应的mysql/bin文件夹中:sql mysqld --remove mysql 2.mysql的根目录下:  ...

  5. MariaDB/MySql 服务消失无法启动

    今天启动电脑打开数据库发现这么一个错误: 2003 can't connect to mysql server on localhost 10038  无奈去查看了服务,发现mysql服务消失了,猜测 ...

  6. MySQL服务无法正常启动的解决方法(1053错误)

    今天我重启了服务器,这下杯具了.mysql一直报1053错误:服务没有及时响应启动或控制请求.我用结束进城和重启服务器方法都无法正常启动.重装MySQL服务重启之后依然无法启动. 我查了一些资料,用管 ...

  7. win10 mysql服务无法正常启动

    刚开始在cmd打开mysql服务时,出现了以下情况 查找资料后发现需要用管理员身份打开cmd, 参考网址如下 https://blog.csdn.net/yhj19920417/article/det ...

  8. kill all mysql_killall mysql服务 mysql服务后无法启动

    Can"t init tc log Aborting | mysql事务日志导致启动失败问题,killall  mysql进程后,mysql无法启动问题总汇: 问题1: 将mysql所有进程 ...

  9. c#启动mysql数据库服务器_C#启动停止SQL数据库服务

    方法二:通过C#代码实现: using System; using System.Windows.Forms; using System.ServiceProcess; class Test : Fo ...

最新文章

  1. 使用编译器——Solidity中文文档(8)
  2. 找回丢失的mysql root 用户密码
  3. 如何成为一个设计师和程序员混合型人才
  4. android 进度条 代码,Android进度条ProgressBar的实现代码
  5. 如何使用UI技术提升租房类APP的看房体验?
  6. 深入理解Javascript闭包
  7. ES6解决了什么问题
  8. LVIS挑战赛冠军总结 | 视觉任务中长尾分布问题研究进展与挑战
  9. 多视角半监督学习:从文本数据中得到不同视角
  10. matlab数据点降噪,matlab学习之降噪平滑算法
  11. onenote组织知识体系_我们的家人教给我们有关组织生活的知识
  12. 【MySQL】MySQL 如何查看sql语句执行时间和效率
  13. Spring字段注入
  14. HBase安装配置及测试
  15. VUE提示Gradient has outdated direction syntax
  16. 使用PING测试IP地址
  17. skywalking-介绍
  18. mysql使用jdbc进行批量插入时把事务设为手动提交比事务自动提交速度快了10倍
  19. 计算机启动突然断电,电脑启动运行过程主机突然断电怎么办
  20. Idel中maven全局配置

热门文章

  1. Codeforces Round #532(Div. 2) B.Build a Contest
  2. 【Ian Goodfellow 强推】GAN 进展跟踪 10 大论文(附下载)
  3. 实现WebSocket和WAMP协议的开源库WampSharp
  4. Android-第三天
  5. 网站前端和后台性能优化的34条经验和方法
  6. 【重点!DP】LeetCode 97. Interleaving String
  7. LeetCode 150. Evaluate Reverse Polish Notation
  8. 关于样本量的快速证明
  9. 栈--进栈,出栈指针修改的顺序问题
  10. 【Oracle】SQLPLUS命令