Получить информацию о Windows, такую как ключ продукта, имя домена, имя пользователя и т. Д.
Как я могу получить детали операционной системы, такие как ОС Serial Number
(Ключ продукта ОС), User Domain Name
,User Name
а также PC Full Name
? Каков наилучший и оптимальный способ его получения?
3 ответа
System.Environment
Проверьте (статический) System.Environment
учебный класс.
Имеет свойства для MachineName
, UserDomainName
, а также UserName
,
Управление системой
Если вы ищете серийный номер BIOS (или много информации о другом оборудовании), вы можете попробовать System.Management
пространство имен, в частности SelectQuery
а также ManagementObjectSearcher
,
var query = new SelectQuery("select * from Win32_Bios");
var search = new ManagementObjectSearcher(query);
foreach (ManagementBaseObject item in search.Get())
{
string serial = item["SerialNumber"] as string;
if (serial != null)
return serial;
}
Вы можете получить другую информацию о машине, запросив, например, Win32_Processor
или другие, перечисленные в MSDN. Это использует WMI
с помощью WQL
,
Ключ продукта Windows через реестр
Для серийного номера ОС во многих версиях Windows он хранится в реестре по адресу HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId
однако он находится в некоторой закодированной форме и должен быть декодирован, чтобы получить ключ продукта.
Вы можете использовать следующий метод для декодирования этого значения, найденного здесь (но немного измененного для ясности).
public string DecodeProductKey(byte[] digitalProductId)
{
// Possible alpha-numeric characters in product key.
const string digits = "BCDFGHJKMPQRTVWXY2346789";
// Length of decoded product key in byte-form. Each byte represents 2 chars.
const int decodeStringLength = 15;
// Decoded product key is of length 29
char[] decodedChars = new char[29];
// Extract encoded product key from bytes [52,67]
List<byte> hexPid = new List<byte>();
for (int i = 52; i <= 67; i++)
{
hexPid.Add(digitalProductId[i]);
}
// Decode characters
for (int i = decodedChars.Length - 1; i >= 0; i--)
{
// Every sixth char is a separator.
if ((i + 1) % 6 == 0)
{
decodedChars[i] = '-';
}
else
{
// Do the actual decoding.
int digitMapIndex = 0;
for (int j = decodeStringLength - 1; j >= 0; j--)
{
int byteValue = (digitMapIndex << 8) | (byte)hexPid[j];
hexPid[j] = (byte)(byteValue / 24);
digitMapIndex = byteValue % 24;
decodedChars[i] = digits[digitMapIndex];
}
}
}
return new string(decodedChars);
}
В качестве альтернативы я нашел проект C# с открытым исходным кодом, который предположительно может извлечь ключ продукта для любой версии Windows: http://wpkf.codeplex.com/ Он использует метод, описанный выше, и предоставляет некоторую дополнительную информацию о машине.
Вы попробовали класс Systeminformation, который предоставляет много информации о текущей системной среде, посмотрите на пример на сайте MSDN. Он имеет следующие свойства:
ComputerName, UserDomianName, UserName... и т. Д.
Вам необходимо использовать метод IPGlobalProperties.GetIPGlobalProperties Чтобы получить информацию, связанную с сетью:
var conInfo = IPGlobalProperties.GetIPGlobalProperties();
Console.WriteLine(conInfo.HostName);
Console.WriteLine(conInfo.DomainName);
...
Для имени машины используйте свойство Environment.MachineName:
Console.WriteLine(System.Environment.MachineName);