[SYSSETUP] SetupStartService: Wait until the service is running

This commit is contained in:
Eric Kohl 2018-08-05 20:02:22 +02:00
parent 5ebcc6cdc1
commit 8f911f21b8

View file

@ -1508,7 +1508,9 @@ SetupStartService(
{
SC_HANDLE hManager = NULL;
SC_HANDLE hService = NULL;
SERVICE_STATUS ServiceStatus;
DWORD dwError = ERROR_SUCCESS;
DWORD dwRetries = 0;
hManager = OpenSCManagerW(NULL,
NULL,
@ -1521,7 +1523,7 @@ SetupStartService(
hService = OpenServiceW(hManager,
lpServiceName,
SERVICE_START);
SERVICE_START | (bWait) ? SERVICE_QUERY_STATUS : 0);
if (hService == NULL)
{
dwError = GetLastError();
@ -1531,7 +1533,27 @@ SetupStartService(
if (!StartService(hService, 0, NULL))
{
dwError = GetLastError();
goto done;
if (dwError != ERROR_SERVICE_ALREADY_RUNNING)
goto done;
if (bWait)
{
for (;;)
{
if (!QueryServiceStatus(hService, &ServiceStatus))
break;
if (ServiceStatus.dwCurrentState != SERVICE_START_PENDING)
break;
if (dwRetries == 30)
break;
dwRetries++;
Sleep(5000);
}
}
}
done: