title('List all services'); $allAlias = array_keys($this->runnerManager->getRunners()); $data = []; foreach ($this->serviceConfigurationManager->getFullServiceList() as $serviceInformations) { try { if (\function_exists('win32_query_service_status') === false) { throw new \Win32ServiceException('Win32Service extension is not installed.'); } $status = win32_query_service_status( $serviceInformations->serviceId(), $serviceInformations->machine() ); $status = match ($status['CurrentState']) { WIN32_SERVICE_CONTINUE_PENDING => 'continue pending', WIN32_SERVICE_PAUSE_PENDING => 'pause pending', WIN32_SERVICE_PAUSED => 'paused', WIN32_SERVICE_RUNNING => 'running', WIN32_SERVICE_START_PENDING => 'start pending', WIN32_SERVICE_STOP_PENDING => 'stop pending', WIN32_SERVICE_STOPPED => 'stopped', default => 'Unknow', }; } catch (\Win32ServiceException $exception) { $status = match ($exception->getCode()) { WIN32_ERROR_ACCESS_DENIED => 'Access denied', WIN32_ERROR_SERVICE_DOES_NOT_EXIST => 'Not registred', default => $exception->getMessage(), }; } $runnerTagAlias = $this->serviceConfigurationManager->getRunnerAliasForServiceId($serviceInformations->serviceId()); $data[] = [ empty($serviceInformations->machine()) ? 'localhost' : $serviceInformations->machine(), $serviceInformations->serviceId(), \in_array($runnerTagAlias, $allAlias) ? 'OK' : sprintf( 'No Symfony service implements "%s" with tag "name: \'%s\', alias: \'%s\'"', RunnerServiceInterface::class, TagRunnerCompilerPass::WIN32SERVICE_RUNNER_TAG, $runnerTagAlias, ), $status, $serviceInformations[WIN32_INFO_DISPLAY], ]; } $io->table(['Machine', 'ServiceId', 'Runner config', 'State', 'Name'], $data); return self::SUCCESS; } }