设为首页收藏本站

SKY外语、计算机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8450|回复: 1
打印 上一主题 下一主题

[C++语言] Service

[复制链接]

3

主题

0

好友

115

积分

注册会员

Rank: 2

性别
保密
跳转到指定楼层
楼主
发表于 2013-6-5 10:03:24 |显示全部楼层 |倒序浏览
10积分

分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
分享淘帖0 收藏收藏0 评分评分

3

主题

0

好友

115

积分

注册会员

Rank: 2

性别
保密
沙发
发表于 2013-6-5 10:04:06 |显示全部楼层
#pragma once

#define WIN32_LEAN_AND_MEAN             //  从 Windows 头文件中排除极少使用的信息
// Windows 头文件:
#include <winsock2.h>
#include <tchar.h>

#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "mswsock.lib")


class CService
{
public:
CService(void);
~CService(void);

bool Install(LPCTSTR ServiceName);


////VOID Install(LINGER ServiceName);

VOID CtrlHandlerCallback(DWORD opCode);
VOID RunCallback(DWORD argumentCount , LPTSTR *arguments);
private:
TCHAR mServiceName[MAX_PATH];
};


.CPP

#pragma once
#include"Service.h"


/*VOID WINAPI RunCallback(DWORD argumentCount , LPTSTR *arguments)
{
Service.RunCallback(argumentCount , arguments);

return;
}

VOID WINAPI CtrlHandlerCallback(DWORD opCode)
{
Service.CtrlHandlerCallback(opCode);

return;
}


CService::CService(void)
{
}


CService::~CService(void)
{
}
*/

bool CService::Install(LPCTSTR ServiceName)
{
TCHAR ServiceFileName [MAX_PATH] = {0,}; //MAX_PATH
SC_HANDLE ServiceControlManager = NULL;
SC_HANDLE ServiceHandle = NULL;

if (!ServiceName) return FALSE;

//获得运行文件的名称
ServiceFileName [0] = ' "';
GetModuleFileName(NULL, ServiceFileName + 1, MAX_PATH - 1) ;
_tcscat_s(ServiceFileName, MAX_PATH, _T("\"")) ;

//通过Service创建选项打开SCM
ServiceControlManager = OpenSCManager (NULL, NULL, SC_MANAGER_CREATE_SERVICE) ;
if ( !ServiceControlManager) return FALSE;

//Service创建为SERVICE_WIN32_OWN_PROCESS形态
CreateService( ServiceControlManager,
  ServiceName, //Service名称
  ServiceName, //显示的名称设置为一致。
  SERVICE_ALL_ACCESS, //可以进行所有的访问
  SERVICE_WIN32_OWN_PROCESS, //WIN 32形态的文件
  SERVICE_DEMAND_START,
  SERVICE_ERROR_NORMAL,
  ServiceFileName,
  NULL,
  NULL,
  NULL,
  NULL,
  NULL);

//创建成功时返回
if ( !ServiceHandle) {
  //失败
  CloseServiceHandle(ServiceControlManager) ; return FALSE;
}

//关闭使用的句柄
CloseServiceHandle(ServiceHandle) ;
CloseServiceHandle(ServiceControlManager) ;

return TRUE;
}

/*void main ()
{
}
*/
回复

使用道具 评分 举报

您需要登录后才可以回帖 登录 | 立即注册


手机版|SKY外语计算机学习 ( 粤ICP备12031577 )    

GMT+8, 2024-5-19 15:43 , Processed in 0.122338 second(s), 33 queries .

回顶部