Windows 服务程序编写说明
SERVICE_TABLE_ENTRY 结构数组, 这个结构记录了这个服务 程序里面所包含的所有服务的名称和服务的进入点函数
SERVICE_TABLE_ENTRY st[] =
{
{ szServiceName, (LPSERVICE_MAIN_FUNCTION)ServiceMain },
{ NULL, NULL }
};
StartServiceCtrlDispatcher(st);
/**************************************************************/
//打开服务控制管理器
SC_HANDLE hSCM = ::OpenSCManager(NULL,NULL, SC_MANAGER_ALL_ACCESS);
//打开服务
SC_HANDLE hService =::OpenService(hSCM, szServiceName,SERVICE_QUERY_CONFIG);
::CloseServiceHandle(hService);
::CloseServiceHandle(hSCM);
//创建服务
SC_HANDLE hService =::CreateService(
hSCM,
szServiceName,
szServiceName,
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL,
szFilePath,NULL, NULL, _T(""), NULL, NULL);
::CloseServiceHandle(hService);
//删除服务
SC_HANDLE hService = ::OpenService(hSCM,szServiceName, SERVICE_STOP | DELETE);
SERVICE_STATUS status;
//停止服务
::ControlService(hService,SERVICE_CONTROL_STOP, &status);
//删除服务
BOOL bDelete =::DeleteService(hService);
::CloseServiceHandle(hService);
::CloseServiceHandle(hSCM);
//注册服务控制
hServiceStatus =RegisterServiceCtrlHandler(szServiceName, ServiceStrl);
SetServiceStatus(hServiceStatus,&status);
///
void WINAPI ServiceStrl(DWORD dwOpcode)
{
switch (dwOpcode){}
}
/**************************************************************/
CreateService(
SC_HANDLE hSCManager, //服务控制管理程序维护的登记数据库的句柄,由系统函数OpenSCManager 返回
LPCWSTR lpServiceName, //以NULL 结尾的服务名,用于创建登记数据库中的关键字
LPCWSTR lpDisplayName, //以NULL 结尾的服务名,用于用户界面标识服务
DWORD dwDesiredAccess, //指定服务返回类型
DWORD dwServiceType, //指定服务类型
DWORD dwStartType, //指定何时启动服务
DWORD dwErrorControl, //指定服务启动失败的严重程度
LPCWSTR lpBinaryPathName, //指定服务程序二进制文件的路径(可带参数)
LPCWSTR lpLoadOrderGroup, //指定顺序装入的服务组名
LPDWORD lpdwTagId, //忽略,NULL
LPCWSTR lpDependencies, //指定启动该服务前必须先启动的服务或服务组
LPCWSTR lpServiceStartName, //以NULL 结尾的字符串,指定服务帐号。如是NULL,则表示使用LocalSystem帐号
LPCWSTR lpPassword //以NULL 结尾的字符串,指定对应的口令。为NULL表示无口令。但使用LocalSystem时填NULL
);