Как я могу получить имя компьютера в службе .NET Windows (C#)?
Это надежный метод, или мне следует обернуть его в try / catch?





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