我正在使用CreateService
創建服務。如果發生崩潰,該服務將再次正常運行,並且如果Windows崩潰,我希望Windows重新啓動該服務。我知道可以從下面的服務msc中設置它。如何創建在崩潰時重新啓動的服務
我如何編程配置服務,如果它發生崩潰總是重新啓動。
我正在使用CreateService
創建服務。如果發生崩潰,該服務將再次正常運行,並且如果Windows崩潰,我希望Windows重新啓動該服務。我知道可以從下面的服務msc中設置它。如何創建在崩潰時重新啓動的服務
我如何編程配置服務,如果它發生崩潰總是重新啓動。
您想在安裝該服務後致電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);
以上回答會給你要點...但它不會編譯。
嘗試:
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)
二手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