Прежде всего, почему вы приводите свойство Status ServiceController из удобного перечисления ServiceControllerStatus к int? Лучше всего оставить это как перечисление. Тем более что ваш код Heartbeat, который сравнивает его с 0, никогда не будет запущен, потому что ServiceControllerStatus не имеет 0 в качестве возможного значения.
Во-вторых, вы не должны использовать цикл while (true). Даже если вы прокомментировали Thread.Sleep, это бесполезная трата ресурсов. Вы можете просто использовать метод WaitForStatus, чтобы дождаться запуска службы:
ServiceController sc = new ServiceController("WebClient");
if (sc.Status == ServiceControllerStatus.Stopped)
{
sc.Start();
sc.WaitForStatus (ServiceControllerStatus.Running, TimeSpan.FromSeconds(30));
}
Это будет ждать до 30 секунд (или что-то еще), пока служба не перейдет в состояние выполнения.
ОБНОВЛЕНИЕ : Я перечитал исходный вопрос, и я думаю, что то, что вы пытаетесь сделать здесь, даже не следует делать с кодом. Если я правильно понял, вы хотите установить зависимость для вашего сервиса от сервиса WebClient при его установке. Затем, когда пользователь запускает вашу службу в диспетчере служб, он автоматически пытается запустить зависимую службу.