Windows 服务程序配置

目标:
1. 实现配置后台服务,使其自动启动。
2. 当程序down后,会自动启动。

/*主要流程*/
 
1. 判断是否已经是服务在运行(argv)
2. 如果是第一次执行,初始化服务:
	SC_HANDLE sc_handle=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
	if(sc_handle==NULL)
	{
		printf("OpenSCManager 安装失败\n");
		return -1;
	}
	char filename[1024]={0};
	//获取当前的绝对路径:
	::GetModuleFileName(NULL,filename,1024);
	cout<<"GetModuleFileName:"<<filename<<endl;
	SC_HANDLE ret;
	//LPCTSTR 
	ret=CreateService(sc_handle,SEVICE_NAME,SEVICE_NAME,SC_MANAGER_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS,SERVICE_AUTO_START,SERVICE_ERROR_NORMAL,filename,NULL,NULL,"", NULL,NULL);
	if(ret==NULL)
	{   
		DWORD errcode=::GetLastError();
		cout<<errcode<<endl;
		printf("CreateService 安装失败\n");
		return -1;
	}
 
3. 配置服务的自动运行:
 
	SC_ACTION act[3];
	SERVICE_FAILURE_ACTIONS sfa;
 
	//First failure:
	act[0].Delay = 60 * 1000; // wait 60 seconds before restarting
	act[0].Type = SC_ACTION_RESTART;
 
	//Second failure:
	act[1].Delay = 60 * 1000;
	act[1].Type = SC_ACTION_RESTART;
 
	//Subsequent failure:
	act[2].Delay = 60 * 1000;
	act[2].Type = SC_ACTION_RESTART;
 
	sfa.lpRebootMsg = NULL;
	sfa.lpsaActions = act;
	sfa.dwResetPeriod = 3600*24; // Reset the error count after 1day
	sfa.lpCommand = NULL;
	sfa.cActions = 3;
 
	int ret = ChangeServiceConfig2(schService, SERVICE_CONFIG_FAILURE_ACTIONS, &sfa);
	if (ret == 0)
	{
		printf("setServiceRecovery 设置自动重启失败: ");
		DWORD errcode=::GetLastError();
		cout<<errcode<<endl;
	}
	else
	{
		printf("设置自动重启成功\n");
	}
4. 执行服务:
printf("服务注册成功\n");
if(::StartService(ret,NULL,NULL)==NULL)
{
    printf("程序启动服务失败,请手动启动agent服务\n");
}
 
/*接下来不是第一次启动的话*/
5. 重定向启动函数:
	SERVICE_TABLE_ENTRY DispatchTable[] =
	{
		{SEVICE_NAME,Service::CmdStart},
 
		{NULL    ,NULL    }
	};
6. 正式启动:
    StartServiceCtrlDispatcher(DispatchTable);


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值