Example #1
0
void ResourceManager::List() const 
{
	Logger* logger = FrameWork::GetLogger();
	logger->LogInfo("Loaded resources:");
	ResourceMap::const_iterator it;
	for (it = mResources.begin(); it != mResources.end(); it++)
		logger->LogInfo("- %s", it->first);
}
int CreateServiceSettingsAction::ExecuteAction(const Argz* az, const ServiceTaskSettings* baseSettings) {  
  CString serviceCommand;
  CString logFile;
  {    
    int ret = ServiceAction().GenerateServiceCommandLine(az, serviceCommand, logFile);
    if (ret != 0) return ret;
  }

  if (logFile.GetLength() > 0) {
    LOG.LogInfoFormat(L"Service log file is set to: %s", logFile);
  }
  
  SimpleCreateServiceSettings settings(baseSettings, serviceCommand);

  if (az->HasArgument(L"/runAsSystem")) {
    settings.setRunAsSystem(true);
    LOG.LogInfo(L"Installing service unser LOCAL_SYSTEM account");
  } else {
    int ret = ParseUserSettings(az, &settings);
    if (ret != 0) return ret;
    LOG.LogInfoFormat(L"Installing service under %s (domain=%s) account", settings.getUserName(), settings.getDomain());
  }

  settings.setAutostart(az->GetBooleanArgument(L"autostart", true) && az->GetBooleanArgument(KEY_AUTORUN, true));

  return ExecuteAction(az, &settings, baseSettings);  
}
void ProcessInterruptTerminateHandler::InterruptProcess(PROCESS_INFORMATION& info) {
  //block from second call
  if (IsInterrupted()) return;
  

  LOG.LogInfo(L"Service process will be killed, exit code would be 42");
  //TODO:implement kill process
  if (0 == TerminateProcess(info.hProcess, 42)) {
    LOG.LogWarnFormat(L"Failed to terminate service process. %s", LOG.GetLastError());
    return;
  }

  //mark interrupt to the process was sent
  Interrupt();
}
DWORD ServiceEventPreShutdownHandler::HandleServiceEvent(ServiceEventContext* context, DWORD dwControl, DWORD dwEventType, LPVOID lpEventData) {
  LOG.LogInfo(L"System pre-shutdown notification received");
  context->GetServiceTask()->CallStopSerive();
  return 0;
}