2009-01-19 75 views
10

在.NET Windows服務(C#)中,如何獲取計算機名稱?在Windows服務中獲取計算機名稱?

這是一個可靠的方法,還是應該把它包裝在try/catch中?

+0

[我如何在.NET中獲取計算機名稱](http://stackoverflow.com/questions/1768198/how-do-i-get-the-computer-name-in-net) – 2017-01-29 11:20:29

回答

20

看看Environment class。那裏有很多的好東西在裏面,包括MachineName

string CurrentMachineName = Environment.MachineName; 

根據該文檔,這可能會產生一個InvalidOperationException,所以你需要知道的這種可能性。不過,這種風險可能並不能保證將其包裝在試用/抓住中。

+2

我們已經看到零星的現場故障,所以如果你的代碼路徑很重要,你應該抓住IOE。 – JBRWilkinson 2009-11-09 10:57:01

12

我認爲首先你必須決定你的意思是「計算機名稱」。

正如其他人所說,而在Windows上可能「傳統」,你可以使用Environment.MachineName屬性來獲取計算機的名稱,這實際上是計算機的NetBIOS名稱。另一種選擇是機器的(完全限定)DNS名稱。但請注意,單臺機器實際上可能有多個適配器/ IP地址/任何內容,因此可能有多個DNS名稱。

考慮到Environment.MachineName的潛在InvalidOperationException的處理,我建議你考慮一下如果你遇到它,你會怎麼做。如果你能做些什麼,你當然可以抓住它。

例如,在我的一些代碼中,我需要獲取計算機名稱(偶然也在服務中),但我僅將其用於診斷目的。如果Environment.MachineName失敗,我只在診斷輸出中使用一些"(unknown)"字符串(並且還記錄一次錯誤)。

如果結果對您的進一步處理至關重要,您應該也可以捕獲異常,將事件寫入Windows事件日誌並「死亡」。

+0

Upvote的詳細答案和建議 – AFract 2015-09-10 13:17:59