2010-07-14 155 views

回答

6

您想在安裝該服務後致電ChangeServiceConfig2。第二個參數設置爲SERVICE_CONFIG_FAILURE_ACTIONS並在SERVICE_FAILURE_ACTIONS一個實例傳遞的第三個參數,是這樣的:

int numBytes = sizeof(SERVICE_FAILURE_ACTIONS) + sizeof(SC_ACTION); 
std::vector<char> buffer(numBytes); 

SERVICE_FAILURE_ACTIONS *sfa = reinterpret_cast<SERVICE_FAILURE_ACTIONS *>(&buffer[0]); 
sfa.dwResetPeriod = INFINITE; 
sfa.cActions = 1; 
sfa.lpsaActions[0].Type = SC_ACTION_RESTART; 
sfa.lpsaActions[0].Delay = 5000; // wait 5 seconds before restarting 

ChangeServiceConfig2(hService, SERVICE_CONFIG_FAILURE_ACTIONS, sfa); 
3

以上回答會給你要點...但它不會編譯。

嘗試:

SERVICE_FAILURE_ACTIONS sfa; 
SC_ACTION actions; 

sfa.dwResetPeriod = INFINITE; 
sfa.lpCommand = NULL; 
sfa.lpRebootMsg = NULL; 
sfa.cActions = 1; 
sfa.lpsaActions = &actions; 

sfa.lpsaActions[0].Type = SC_ACTION_RESTART; 
sfa.lpsaActions[0].Delay = 5000; 

ChangeServiceConfig2(hService, SERVICE_CONFIG_FAILURE_ACTIONS, &sfa) 
8

二手Deltanine的方法,但修改了它有點要能夠控制每個失敗操作:

SERVICE_FAILURE_ACTIONS servFailActions; 
SC_ACTION failActions[3]; 

failActions[0].Type = SC_ACTION_RESTART; //Failure action: Restart Service 
failActions[0].Delay = 120000; //number of seconds to wait before performing failure action, in milliseconds = 2minutes 
failActions[1].Type = SC_ACTION_RESTART; 
failActions[1].Delay = 120000; 
failActions[2].Type = SC_ACTION_NONE; 
failActions[2].Delay = 120000; 

servFailActions.dwResetPeriod = 86400; // Reset Failures Counter, in Seconds = 1day 
servFailActions.lpCommand = NULL; //Command to perform due to service failure, not used 
servFailActions.lpRebootMsg = NULL; //Message during rebooting computer due to service failure, not used 
servFailActions.cActions = 3; // Number of failure action to manage 
servFailActions.lpsaActions = failActions; 

ChangeServiceConfig2(sc_service, SERVICE_CONFIG_FAILURE_ACTIONS, &servFailActions); //Apply above settings