BOOL svcReport(DWORD currentState, DWORD exitCode, DWORD checkPoint, DWORD waitHint) { BOOL result; /* Disable control requests while starting */ if (currentState == SERVICE_START_PENDING) { SvcStatus.dwControlsAccepted = 0; } else { SvcStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_PAUSE_CONTINUE; } SvcStatus.dwCurrentState = currentState; SvcStatus.dwWin32ExitCode = exitCode; SvcStatus.dwCheckPoint = checkPoint; SvcStatus.dwWaitHint = waitHint; /* Make the report */ if (!(result = SetServiceStatus(SvcStatusHandle, &SvcStatus))) { /* If there is an error then bail out */ svcStop("SetServiceStatus failed!"); } return result; }
int qdbRun(int argc, char **argv) { eprintf("\n"); eprintf(" ___ _ ____ ____\n"); eprintf(" / _ \\ _ _ ___ ___| |_| _ \\| __ )\n"); eprintf("| | | | | | |/ _ \\/ __| __| | | | _ \\\n"); eprintf("| |_| | |_| | __/\\__ \\ |_| |_| | |_) |\n"); eprintf(" \\__\\_\\\\__,_|\\___||___/\\__|____/|____/\n"); eprintf(" www.questdb.org\n\n"); CONFIG config; initAndParseConfig(argc, argv, &config); int rtn = 55; if (config.errorCode == ECONFIG_OK) { switch (config.command) { case CMD_START: rtn = svcStart(&config); break; case CMD_STOP: rtn = svcStop(&config); break; case CMD_STATUS: rtn = svcStatus(&config); break; case CMD_INSTALL: rtn = svcInstall(&config); break; case CMD_REMOVE: rtn = svcRemove(&config); break; case CMD_SERVICE: qdbDispatchService(&config); rtn = 0; break; default: rtn = qdbConsole(&config); break; } } else { logConfigError(&config); eprintf("Usage: %s [start|stop|status|install|remove] [-d dir] [-f] [-j JAVA_HOME] [-t tag]", argv[0]); } freeConfig(&config); if (rtn == E_ACCESS_DENIED) { eprintf("ACCESS DENIED\n\nPlease try again as Administrator."); } return rtn; }
VOID svcRunNT(char *name) { SERVICE_TABLE_ENTRY dispatchTable[] = { { TEXT(name), (LPSERVICE_MAIN_FUNCTION)svcMain }, { NULL, NULL } }; if (!StartServiceCtrlDispatcher(dispatchTable)) { svcStop("StartServiceCtrlDispatcher failed"); } }