Windows 2016: ServiceController.DisplayName возвращает ServiceController.ServiceName при запуске Windows - PullRequest
0 голосов
/ 04 мая 2018

У меня есть служба (основная), которая отвечает за заботу о других службах Windows. Он решает, какие службы необходимо остановить, запустить и т. Д.

Основной сервис контролирует другие сервисы по DisplayNames. При запуске Windows он читает DisplayNames из конфигурации и угрожает другим службам.

В Windows 2016 для запуска служб требуется некоторое время, и ServiceControl.DisplayName возвращает ServiceController.ServiceName, поэтому основная служба не может найти службу из конфигурации.

Существует ли какой-нибудь обходной путь, чтобы это исправить?

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Отображаемые имена, как следует из названия, предназначены для отображения. Они не предназначены для сравнения с чем-либо, что использовалось для определения соответствия.

Для взаимодействия между программами вы должны использовать имена сервисов.

Таким образом, ваш вопрос основан на неверной предпосылке - что отображаемые имена стабильны и на них можно положиться. Каким бы неприятным это ни казалось, вам нужно перестроить свою систему, чтобы не полагаться на отображаемые имена.

0 голосов
/ 04 мая 2018

Я думаю, вы могли бы попытаться дождаться определенного статуса?

Например :

ServiceController.WaitForStatus(ServiceControllerStatus.Running); будет ждать, пока его статус не станет " Running ". Приостановка обработки заявки прекращается до тех пор, пока сервис не достигнет необходимого статуса. Вот документация .

А также, вы можете проверить эту статью - ServiceController в C # .

Дайте мне знать, если это сработало.

...