利用Windows API启动MySQL服务

源码版的MySQL使用了许多Windows API,这些API还是值得学习的。在/mysql-5.0.0-alpha-win-src/mysql-5.0.0-alpha/sql/nt_servc.cpp的NTService::IsService(LPCSTR ServiceName)就使用了两个API:OpenSCManager和OpenService。

看了一下MSDN,原来这两个API可以通过制定的服务名来启动网络上某台机器上的服务。大致过程分为三步:

1. 连接SCM(Service Connect Manager)数据库。

2. 获得某个Service的句柄。

3. 通过获得的句柄来启动Service。

下面是根据MSDN的源码启动MySQL服务的代码。前提是我的机器已经安装了MySQL, 那么MySQL已经是注册的服务了。

 

#include <windows.h>
#include <stdio.h>
TCHAR szSvcName[80];

SC_HANDLE schSCManager;
SC_HANDLE schService;

VOID DoStartSvc()
{
    SERVICE_STATUS_PROCESS ssStatus;
    DWORD dwOldCheckPoint;
    DWORD dwStartTickCount;
    DWORD dwWaitTime;
    DWORD dwBytesNeeded;

    //第一步: 获得数据库连接
    schSCManager = OpenSCManager(
        NULL,                    //local computer
        NULL,                    //ServicesActive database
        SC_MANAGER_ALL_ACCESS); //full access rights

    if(NULL == schSCManager)
    {
        printf("OpenSCManager failed (%d)/n",GetLastError());
        return;
    }
    //第二步:获得Service句柄
    schService = OpenService(
        schSCManager,        //SCM database
        szSvcName,            //name of service
        SERVICE_ALL_ACCESS);//full access
    
    if(schService==NULL)
    {
        printf("OpenService failed (%d)/n",GetLastError());
        CloseServiceHandle(schSCManager);
        return;
    }
    //第三步:启动Service
    if(!StartService(
        schService,        //handle to service
        0,                //number of arguments
        NULL))            //no arguments
    {
        printf("StartService failed (%d)/n",GetLastError());
        CloseServiceHandle(schService);
        CloseServiceHandle(schSCManager);
        return;
    }
    else
    {
        printf("OK");
    }
}
void main()
{

    //不知道该怎么给TCHAR数组赋值,就这么写了。
    szSvcName[0]=TCHAR('M');
    szSvcName[1]=TCHAR('y');
    szSvcName[2]=TCHAR('S');
    szSvcName[3]=TCHAR('Q');
    szSvcName[4]=TCHAR('L');
    szSvcName[5]=TCHAR(0);

    DoStartSvc();

}

 

测试代码时,建议把任务管理器上的“服务”那一栏勾出来。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值