Нет, вы не можете изменить процесс, связанный с диспетчером управления службами. Чтобы понять, почему это невозможно, вам нужно посмотреть, как работает неуправляемый API службы Windows. (который .NET упаковывает).
Вы подключаетесь к диспетчеру управления службами, вызывая StartServiceCtrlDispatcher (который может быть вызван только один раз). В параметре lpServiceTable
вы передаете указатель на функцию ServiceMain
, которая, очевидно, действительна только для текущего процесса, и все уведомления управления службами отправляются этой функции.
Звонок на StartServiceCtrlDispatcher
также не возвращается, пока все службы не будут остановлены. Таким образом, управляемый элемент управления службой также связан с потоком в процессе, который запустил службу, поэтому он не может выйти без прерывания связи с менеджером службы.
Так что в вашем примере шаг 4 не может быть выполнен, и процесс a.exe должен оставаться в живых в течение продолжительности.