2010-07-14 14 views
9

पर पुनरारंभ करने वाली सेवा कैसे बनाएं I CreateService का उपयोग कर एक सेवा बना रहा हूं। अगर यह दुर्घटनाग्रस्त हो जाता है तो सेवा फिर से ठीक हो जाएगी और मैं विंडोज़ को क्रैश होने पर सेवा को पुनरारंभ करना चाहता हूं। मुझे पता है कि इसे एमएससी सेवाओं से नीचे सेट करना संभव है।क्रैश

Windows Service Recovery Dialog

मैं कैसे प्रोग्राम के सेवा को कॉन्फ़िगर हमेशा पुनः आरंभ करने की अगर यह दुर्घटना करने के लिए होता कर सकते हैं।

उत्तर

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 
संबंधित मुद्दे