利用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();

}

 

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

 

你可能感兴趣的:(利用Windows API启动MySQL服务)