- 性别
- 保密
- 积分
- 100
- 积分
- 115
- 精华
- 0
- 阅读权限
- 20
- 注册时间
- 2013-5-28
- 最后登录
- 2013-6-8
- 帖子
- 4
- 性别
- 保密
|
#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 ()
{
}
*/
|
|