Получить имя компьютера в службе Windows?

В службе .NET Windows (С#), как я могу получить имя компьютера?

Это надежный метод, или я должен его обернуть в try/catch?

Ответ 1

Посмотрите класс среды. Там много приятных вещей, в том числе MachineName:

string CurrentMachineName = Environment.MachineName;

В соответствии с документами это может вызвать исключение InvalidOperationException, поэтому вам нужно знать об этой возможности. Вероятно, риск не гарантирует его обертку при попытке/уловке.

Ответ 2

Я думаю, что сначала вы должны решить, что вы подразумеваете под "именем компьютера".

Как говорили другие, и, возможно, "традиционно" в окнах, вы должны использовать свойство Environment.MachineName, чтобы получить компьютер name, который на самом деле является именем NetBIOS машины. Другим вариантом может быть (полное) DNS-имя машины. Имейте в виду, однако, что одна машина может иметь несколько адаптеров/IP-адресов/независимо друг от друга и, следовательно, несколько DNS-имен.

Учитывая обработку потенциала InvalidOperationException Environment.MachineName, я предлагаю подумать о том, что вы на самом деле делаете, если столкнетесь с ним. Если вы можете что-то сделать, вы можете и, конечно же, поймать его.

Например, в некоторых из моего кода мне нужно получить имя компьютера (кстати, также в службе), но я использую его только для целей диагностики. Если Environment.MachineName выходит из строя, я просто использую строку "(unknown)" в диалоговом окне (а также регистрирую ошибку один раз).

Если результат жизненно важен для вашей дальнейшей обработки, вы, вероятно, должны также поймать исключение, напишите инцидент в журнале событий Windows и "умереть".