windows中服务(service)学习

感谢 songtzu.

服务程序的编写可以参考:https://www.cnblogs.com/songtzu/p/3543920.html

服务的启动

从服务程序到服务正真运行起来,可以分为两步。一,创建服务;二,启动服务。

创建服务,通过CreateService(***)可以在服务数据库中建立一个新的服务项,还会在注册表生成相应的数据。如果创建成功,可以通过任务管理器查看新建服务。

        注册表数据:

      任务管理器:

 

 

启动服务,服务创建只是生成相应的“配置”数据,服务程序还没有正真运行起来。在之前的基础上调用StartService(***),就可以启动服务了。

完整的启动服务过程:

void LanuchService(char* BinPath)
{
	char ServiceName[] = "MemoryStatus";
	SC_HANDLE     hSCManager = NULL,hService=NULL;
	SERVICE_STATUS  ServiceStatus = { 0 };
	hSCManager=OpenSCManagerA(NULL, NULL, SC_MANAGER_ALL_ACCESS);//0XF003F
	if (hSCManager)
	{
		hService = OpenServiceA(hSCManager, ServiceName, SERVICE_ALL_ACCESS);//0XF01FF
		if (hService)
		{//服务已经创建
			printf("Service:%s is created!\n", ServiceName);
			if (QueryServiceStatus(hService, &ServiceStatus))
			{
				if (ServiceStatus.dwCurrentState == SERVICE_STOPPED)
				{
					printf("[+++]service is stopped,let's get it running!\n");
					if (StartServiceA(hService, NULL, NULL))
					{
						printf("service is running now!\n");
					}
				}
			}

		}
		else
		{
			//printf("OpenService fails,error is 0x%x\n", GetLastError());
			if (ERROR_SERVICE_DOES_NOT_EXIST == GetLastError())
			{//服务没有创建
				hService=CreateServiceA(hSCManager,ServiceName,ServiceName,SERVICE_ALL_ACCESS,
					SERVICE_WIN32_SHARE_PROCESS,SERVICE_DEMAND_START,SERVICE_ERROR_NORMAL,BinPath,
					NULL, NULL, NULL, NULL, NULL);
				if (hService)
				{
					printf("[---]service is created!");
					if (StartServiceA(hService, NULL, NULL))//启动服务
					{
						printf("service is running now!\n");
					}
					else
					{
						printf("start new service fails,error is 0x%x\n", GetLastError());
					}
				}
				else
				{
					printf("CreateServiceA fails,error is 0x%x\n", GetLastError());
				}
			}
		}
	}
	else
	{
		printf("OpenSCManagerA fails,error is 0x%x\n", GetLastError());
	}
	if (hService)
	{
		CloseServiceHandle(hService);
	}
	if (hSCManager)
	{
		CloseServiceHandle(hSCManager);
	}
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值