public static void Start()

in Configurator/Core/Server/MysqlSCM.cs [402:498]


    public static void Start(string serviceName, CancellationToken cancellationToken, string additionalOptions = null, int waitForStatusSeconds = 0)
    {
      if (string.IsNullOrEmpty(serviceName))
      {
        return;
      }

      try
      {
        using (var ssc = new ExpandedServiceController(serviceName))
        {
          string logMessage = null;
          var waitForStatus = true;
          var waitingStatus = ServiceControllerStatus.Running;
          var startService = true;
          switch (ssc.Status)
          {
            case ServiceControllerStatus.Running:
              startService = false;
              waitForStatus = false;
              logMessage = string.Format(Resources.WindowsServiceAlreadyRunning, serviceName);
              break;

            case ServiceControllerStatus.StartPending:
            case ServiceControllerStatus.ContinuePending:
              startService = false;
              logMessage = string.Format(Resources.WindowsServiceWaitingToStart, serviceName);
              break;

            case ServiceControllerStatus.PausePending:
              waitingStatus = ServiceControllerStatus.Paused;
              logMessage = string.Format(Resources.WindowsServiceWaitingToPause, serviceName);
              break;

            case ServiceControllerStatus.StopPending:
              waitingStatus = ServiceControllerStatus.Stopped;
              logMessage = string.Format(Resources.WindowsServiceWaitingToStop, serviceName);
              break;

            case ServiceControllerStatus.Paused:
            case ServiceControllerStatus.Stopped:
              waitForStatus = false;
              logMessage = string.Format(Resources.WindowsServiceStoppedOrPaused, serviceName);
              break;
          }

          if (!string.IsNullOrEmpty(logMessage))
          {
            Logger.LogVerbose($"{DateTime.Now} - {logMessage}");
          }

          if (waitForStatus)
          {
            ssc.WaitForStatus(waitingStatus, cancellationToken);
          }

          if (startService)
          {
            Logger.LogVerbose($"{DateTime.Now} - {string.Format(Resources.WindowsServiceStarting, serviceName)}");
            if (!string.IsNullOrEmpty(additionalOptions))
            {
              ssc.Start(additionalOptions.Split(' '));
            }
            else
            {
              ssc.Start();
            }

            if (waitForStatusSeconds == 0)
            {
              ssc.WaitForStatus(ServiceControllerStatus.Running, cancellationToken);
            }
            else
            {
              ssc.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 0, waitForStatusSeconds));
            }
            
            if (ssc.Status == ServiceControllerStatus.Running)
            {
              Logger.LogVerbose($"{DateTime.Now} - {string.Format(Resources.WindowsServiceStarted, serviceName)}");
            }
            else
            {
              Logger.LogError($"{DateTime.Now} - {string.Format(Resources.WindowsServiceStartFailed, serviceName)}");
            }
            
          }

          ssc.Close();
        }
      }
      catch (Exception ex)
      {
        Logger.LogException(ex);
        throw;
      }
    }