【Windows】服务程序

本文详细介绍了Windows服务的配置和管理,包括如何修改服务启动后失败重启的设置、使用sc命令安装和卸载服务,以及服务的交互式设计。讨论了服务的入口点、主函数、控制处理函数和服务状态转换,并提供了MSDN的相关链接。强调了在Windows 7及以后版本中,服务与UI交互的限制和解决方案。
摘要由CSDN通过智能技术生成
修改服务启动后失败重启设置

ChangeServiceConfig2

	SERVICE_FAILURE_ACTIONS sdBuf={0};
    BOOL bSuccess=TRUE;
 
	 if (argc!=2)
	 {
		return 1;
	 }
    // Open a handle to the service. 
	 SC_HANDLE sch=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
 	if (sch==NULL)
	 {
  		return 1;
	 }
    SC_HANDLE schService = OpenService( 
        sch,           // SCManager database 
        argv[1],    // name of service 
        SC_MANAGER_ALL_ACCESS); // need CHANGE access

    if (schService == NULL) 
    {
        printf("OpenService failed (%d)\n", GetLastError()); 
        return FALSE;
    }

    sdBuf.lpRebootMsg=NULL;
 	sdBuf.dwResetPeriod=3600*24;		//重新应用的事件间隔,1天

 	SC_ACTION action[3];

 	action[0].Delay=60*1000;			//第一次失败后的等待时间,1分钟
 	action[0].Type=SC_ACTION_RESTART;	//失败后重启

 	action[1].Delay=0;
 	action[1].Type=SC_ACTION_NONE;		//失败后无动作
 	action[2].Delay=0;
 	action[2].Type=SC_ACTION_NONE;

 	sdBuf.cActions=3;
 	sdBuf.lpsaActions=action;
 	sdBuf.lpCommand=NULL;

    if( !ChangeServiceConfig2(
        schService,                 
        SERVICE_CONFIG_FAILURE_ACTIONS, 
        &sdBuf) )                   
    {
        printf("%s ChangeServiceConfig2 failed\n",argv[1]);
        bSuccess = FALSE;
    }
    else
        printf("%s ChangeServiceConfig2 succeeded\n",argv[1]);
 
    CloseServiceHandle(schService);
服务相关(非代码)
  1. 本机查看服务:services.msc /s 或 手动启动 计算机–>管理–>服务和应用程序–>服务
  2. 手动安装/卸载服务
    安装:sc create 服务名 binpath=服务调用的进程全路径
    卸载:sc delete 服务名
  3. 服务的界面。Interactive Services
    最便捷的方式是使用 WTSSendMessage API 弹出一个对话框,无需任何额外工作。
    如果是直接的 MessageBox API,或者是WinExec直接新启动一个GUI进程,需要在CreateService的时候Service类型参数带上SERVICE_WIN32_OWN_PROCESS | SERV
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值