2009-01-19 15 views
10

W usłudze Windows .NET (C#), jak mogę uzyskać nazwę komputera?Uzyskaj nazwę komputera w usłudze systemu Windows?

Czy jest to niezawodna metoda, czy też powinienem ją opakować w try/catch?

+0

Możliwy duplikat [Jak uzyskać nazwę komputera w .NET] (http://stackoverflow.com/questions/1768198/how-do-i-get-tcomputer-name-in-net) –

Odpowiedz

20

Spójrz na Environment class. Są tam wiele miłych rzeczy tam, w tym MachineName:

string CurrentMachineName = Environment.MachineName; 

Zgodnie z docs, to może generować InvalidOperationException więc trzeba zdawać sobie sprawę z tej możliwości. Ryzyko prawdopodobnie nie gwarantuje owijania go w try/catch.

+2

Widzieliśmy sporadyczne awarie w terenie, więc powinieneś złapać IOE, jeśli twoja ścieżka kodowa jest krytyczna. – JBRWilkinson

12

Myślę, że najpierw musisz zdecydować, co masz na myśli przez "nazwę komputera".

Jak mówili inni, i ewentualnie „tradycyjnie” w systemie Windows, należy użyć właściwości Environment.MachineName uzyskać nazwę komputera , który jest rzeczywiście nazwa NetBIOS maszyny. Inną opcją jest (w pełni kwalifikowana) nazwa DNS urządzenia. Należy jednak pamiętać, że jeden komputer może mieć wiele adapterów/adresów IP/cokolwiek, a tym samym wiele nazw DNS.

Biorąc pod uwagę sposób postępowania z potencjałem InvalidOperationException z Environment.MachineName, sugeruję zastanowienie się, co byś zrobił, gdybyś go spotkał. Jeśli jest coś, co możesz z tym zrobić, możesz i oczywiście go złapać.

Na przykład, w niektórych z mojego kodu, potrzebuję uzyskać nazwę komputera (nawiasem mówiąc także w usłudze), ale używam go tylko do celów diagnostycznych. Jeśli zawiedzie Environment.MachineName, używam tylko ciągu "(unknown)" w wynikach diagnostyki (a także rejestruję błąd raz).

Jeśli wynik jest niezbędny do dalszego przetwarzania, prawdopodobnie należy również uwzględnić wyjątek, zapisać incydent w dzienniku zdarzeń systemu Windows i "umrzeć".

+0

Rozpatrzenie szczegółowych odpowiedzi i porad – AFract

Powiązane problemy