Почему значение System.Environment.MachineName указано в верхнем регистре?
Имя моего компьютера в нижнем регистре (я вижу, что в диалоговом окне "Дополнительные параметры системы", вкладка "Имя компьютера"), но System.Environment.MachineName
сообщает в верхнем регистре. Это почему? Это реальная проблема для меня, потому что из моих тестов PrincipalPermissionAttribute
выполняет сравнение имен регистров с учетом регистра (я сопоставляю свои пользовательские роли с группами Windows, и моя среда не является доменной). Любой совет?
3 ответа
Вместо этого используйте Dns.GetHostName, который должен вернуть его в правильном регистре (по крайней мере, на моем компьютере).
Источник для Environment.MachineName
для.NET 4.7.1 находится здесь: https://referencesource.microsoft.com/
Это п / вызывает 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.
Согласно этой статье MSDN, ее регистр не зависит от http://msdn.microsoft.com/en-us/library/ms724220(VS.85).aspx
В каком сценарии выполняется сравнение с учетом регистра?