В службе .NET Windows (С#), как я могу получить имя компьютера?
Это надежный метод, или я должен его обернуть в try/catch?
В службе .NET Windows (С#), как я могу получить имя компьютера?
Это надежный метод, или я должен его обернуть в try/catch?
Посмотрите класс среды. Там много приятных вещей, в том числе MachineName:
string CurrentMachineName = Environment.MachineName;
В соответствии с документами это может вызвать исключение InvalidOperationException, поэтому вам нужно знать об этой возможности. Вероятно, риск не гарантирует его обертку при попытке/уловке.
Я думаю, что сначала вы должны решить, что вы подразумеваете под "именем компьютера".
Как говорили другие, и, возможно, "традиционно" в окнах, вы должны использовать свойство Environment.MachineName
, чтобы получить компьютер name, который на самом деле является именем NetBIOS машины. Другим вариантом может быть (полное) DNS-имя машины. Имейте в виду, однако, что одна машина может иметь несколько адаптеров/IP-адресов/независимо друг от друга и, следовательно, несколько DNS-имен.
Учитывая обработку потенциала InvalidOperationException
Environment.MachineName
, я предлагаю подумать о том, что вы на самом деле делаете, если столкнетесь с ним. Если вы можете что-то сделать, вы можете и, конечно же, поймать его.
Например, в некоторых из моего кода мне нужно получить имя компьютера (кстати, также в службе), но я использую его только для целей диагностики. Если Environment.MachineName
выходит из строя, я просто использую строку "(unknown)"
в диалоговом окне (а также регистрирую ошибку один раз).
Если результат жизненно важен для вашей дальнейшей обработки, вы, вероятно, должны также поймать исключение, напишите инцидент в журнале событий Windows и "умереть".