कभी-कभी आप सेवा से ही सेवा को पुनः आरंभ करना चाहते हैं। यह समाधान मेरे लिए काम किया। मैंने स्पष्टता के लिए बल्कि मामूली टाइमर कोड छोड़ा। ध्यान दें कि यह समाधान केवल इसलिए काम करता है क्योंकि कॉलर एक सेवा है और एक उच्च स्तर पर चलता है।
void Watchdog::OnTimeout()
{
STARTUPINFO si = { };
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
PROCESS_INFORMATION pi = { };
// is modified by the call to CreateProcess (unicode version).
TCHAR szCmdLine[] = _T("cmd.exe /C \"net stop <yourservicenamehere> & net start <yourservicenamehere>\"");
// send shell command to restart our service.
if (!CreateProcess(NULL, szCmdLine, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi))
{
// do some error reporting...
LOG("*** ERROR *** Watchdog timeout. Restart attempt failed. Last error: 0x%x\n", GetLastError());
}
}
स्रोत
2016-09-09 16:29:46