Получить имя компьютера в службе Windows? - PullRequest
11 голосов
/ 19 января 2009

Как получить имя компьютера в службе Windows .NET (C #)?

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

Ответы [ 2 ]

21 голосов
/ 19 января 2009

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

string CurrentMachineName = Environment.MachineName;

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

12 голосов
/ 20 января 2009

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...