private static void WaitForServiceStatus(SC_HANDLE service, ServiceState status) { //query service status again to check that it changed var tests = 0; while (tests < 40) { if (GetState(service) == status) { break; } Thread.Sleep(500); tests++; } if (tests >= 40) { throw new TimeoutException($"Timed-out waiting for service status {status}"); } }
private static ServiceState GetState(SC_HANDLE handle) => QueryServiceStatus(handle, out var i) ? i.dwCurrentState : throw Win32Error.GetLastError().GetException();