4

如何获取操作系统详细信息,如操作系统Serial Number(操作系统产品密钥)User Domain NameUser NamePC Full Name?获得它的最佳方式和最佳方式是什么?

4

3 回答 3

9

系统.环境

查看(静态)System.Environment类。

它具有MachineNameUserDomainName和的属性UserName

系统管理

如果您正在寻找 BIOS 序列号(或其他硬件上的大量信息),您可以尝试System.Management命名空间,特别是SelectQueryManagementObjectSearcher.

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;
}

您可以通过查询获得有关机器的其他信息,例如MSDNWin32_Processor上列出的或其他信息。这是使用via 。WMIWQL

通过注册表的 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/它使用上面给出的方法并提供有关机器的一些附加信息。

于 2012-12-13T06:40:24.297 回答
-1

您需要使用IPGlobalProperties.GetIPGlobalProperties 方法 来获取网络相关信息:

var conInfo = IPGlobalProperties.GetIPGlobalProperties();
Console.WriteLine(conInfo.HostName);
Console.WriteLine(conInfo.DomainName);
...

对于机器名称,请使用Environment.MachineName 属性

Console.WriteLine(System.Environment.MachineName);
于 2012-12-13T06:40:01.727 回答
-1

您是否尝试过Systeminformation 类,它提供了有关当前系统环境的大量信息,请查看 MSDN 网站上的示例。它具有以下特性:

计算机名,用户域名用户名...等

于 2012-12-13T06:40:15.097 回答