c++写的服务,能安装、卸载,但是启动的时候出现错误1067,进程意外终止
#include "StdAfx.h"
//#include "Resource.h"
#include ".\ntservice.h"
DWORD CNTService::dwThreadId;
LPTSTR CNTService::m_lpServiceName;//服务程序内部名称,名字不能有空格
LPTSTR CNTService::m_lpServiceDisplayName;//SERVICE程序在管理器中的显示名称,任意字符
LPTSTR CNTService::m_lpServiceDescription;//服务在管理器中的描述
LPTSTR CNTService::m_lpDependencies;//服务依赖
DWORD CNTService::m_dwServiceType;//服务类别
TCHAR CNTService::m_lpServicePathName[512];//SERVICE程序的EXE文件路径
CNTService * CNTService::m_pService;
SERVICE_STATUS CNTService::m_ssServiceStatus;//SERVICE程序的状态struct
SERVICE_STATUS_HANDLE CNTService::m_sshServiceStatusHandle;//SERVICE程序状态的HANDLE
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CNTService::CNTService()
{
GetModuleFileName(NULL, m_lpServicePathName, 512);//取当前执行文件路径
m_lpServiceName = _T("HWService");//服务名称
m_lpServiceDisplayName = _T("HWService");//显示的名称
m_lpServiceDescription = _T("");//服务描述
m_lpDependencies = NULL;//服务依赖
m_dwServiceType = SERVICE_WIN32_OWN_PROCESS;//服务类别
m_pService = this;
m_ssServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
m_ssServiceStatus.dwServiceSpecificExitCode = 0;
}
CNTService::~CNTService()
{
}
BOOL CNTService::InstallService()
{
SC_HANDLE schSCManager;//打开SCM用的句柄
SC_HANDLE schService;//建立SERVICE用的句柄
schSCManager = OpenSCManager(//调用打开SERVICE管理器API
NULL,//机器名称,设置NULL为本地机器
NULL,//数据库名称,NULL为缺省数据库
SC_MANAGER_CREATE_SERVICE//或 SC_MANAGER_ALL_ACCESS
);//希望打开的操作权限,详见MSDN
if(schSCManager)// 如果打开SERVICE管理器成功
{
schService = CreateService(//调用建立SERVICE的API
schSCManager,//SERVICE管理器数据库的句柄
m_lpServiceName,//服务名称
m_lpServiceDisplayName,//显示的名称
SERVICE_ALL_ACCESS,//希望得到的运行权限
m_dwServiceType,//SERVICE的类型
SERVICE_AUTO_START,//启动的方式
SERVICE_ERROR_NORMAL,//错误控制类型
m_lpServicePathName,//可执行文件的路径名
NULL,//一组服务装入时的顺序
NULL,//检查人标记
m_lpDependencies,//从属
NULL,//本地USER名
NULL);//密码
if(schService)//如果建立SERVICE成功
{
SERVICE_DESCRIPTION description;
description.lpDescription = m_lpServiceDescription;
ChangeServiceConfig2(schService,SERVICE_CONFIG_DESCRIPTION,&description);//修改描述
CloseServiceHandle(schService);//释放SERVICE句柄,准备退出
}
else
{
CloseServiceHandle(schSCManager);//释放SERVICE管理器句柄
return FALSE;//建立SERVICE失败返回
}
CloseServiceHandle(schSCManager);//释放SERVICE管理器句柄
}
else
{
return FALSE;//打开管理器失败返回
}
return TRUE;//一切正常返回
}
[解决办法]
服务属性里面的语句能不能在 cmd 下单独运行成功?
[解决办法]
那就证明你的运行程序本身有问题,或者是参数没有传对,
你先把那段的命令运行成功再来看,
并不是启动服务代码的问题,
服务的启动就是调用那段命令,
连那段命令都无法运行成功, 更不用说服务调用了。
[解决办法]
[解决办法]
我的主程序里是空的~!完全就是个框架~!
