Получить информацию о 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);
Другие вопросы по тегам