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;
SC_ACTION action[3];
action[0].Delay=60*1000;
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);