2010-12-18 39 views
4

我的機器名稱是小寫(我看到在高級系統設置對話框中,計算機名稱選項卡),但System.Environment.MachineName報告大寫。這是爲什麼?這對我來說是一個真正的問題,因爲從我的測試PrincipalPermissionAttribute對角色名稱進行區分大小寫比較(我將自定義角色映射到Windows組,並且我的環境是非域)。有任何建議嗎?爲什麼System.Environment.MachineName值是大寫的?

回答

3

改爲使用Dns.GetHostName,應該返回正確的大小寫(至少它在我的電腦上)。

+0

謝謝,爲我工作! Dns.GetHostName()可能返回一個與NETBIOS名稱不同的名稱(因爲我使用它來構造本地Windows組名)? – UserControl 2010-12-18 14:13:11

+0

@用戶:好吧,'GetHostName'將返回DNS主機名,但我不記得那是如何與netbios名稱相關的。 – 2010-12-18 14:20:15

+1

如果任何人有興趣(因爲我是)[這裏是本地方法](https://msdn.microsoft.com/en-us/library/windows/desktop/ms738527(v = vs.85).aspx)即調用來獲得結果。如果您打算使用此功能,請提供一些有關此過程的詳細信息。 – Will 2015-04-06 19:58:24

1

根據這個MSDN文章,它的情況下 - 不敏感 http://msdn.microsoft.com/en-us/library/ms724220(VS.85).aspx

在這情況下,它是做區分大小寫的比較?

+0

我剛剛重新測試它,可以確認如果我有角色爲「MYBOX \ SupportPersonnel」PrincipalPermission引發異常,但在「mybox \ SupportPersonnel」的情況下,一切都按預期工作。我的環境是Windows 7 x64。 – UserControl 2010-12-18 14:09:55

1

Environment.MachineName爲用於.NET 4.7.1的源是在這裏:https://referencesource.microsoft.com/#mscorlib/system/environment.cs,be0b5c103d248dce

它的p /調用GetComputerName如這裏看出:https://referencesource.microsoft.com/#mscorlib/microsoft/win32/win32native.cs,0c7d7f4f83d4ddd0

這裏是GetComputerName功能:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724295(v=vs.85).aspx,其中指出:

GetComputerName只檢索本地計算機的NetBIOS名稱。 要檢索DNS主機名稱,DNS域名或DNS名稱的完全限定 ,請調用GetComputerNameEx函數。

的MSDN的計算機名稱,https://msdn.microsoft.com/en-us/library/ms724220(VS.85).aspx,指出:

的NetBIOS名稱由最多15個字節的OEM字符,包括 字母,數字,連字符和句號。某些字符是特定於 的字符集。 NetBIOS名稱通常在OEM 字符集中表示。 OEM字符集取決於語言環境。某些OEM 字符集將某些字符表示爲兩個字節。 NetBIOS 按照慣例,名稱以大寫字母表示,其中 從小寫字母到大寫字母的翻譯算法是OEM字符集 的依賴項。

因此,NetBIOS名稱按慣例是大寫,System.Environment.MachineName返回系統的NetBIOS名稱。

相關問題