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;
}
}