我一直在使用以下代码来获取 Windows 许可证密钥。它工作了很长时间。但现在我发现它可以在 Windows XP (x86) 上运行,但不能在 Windows 7 x64 上运行。
原因:DigitalProductID
注册表值仅包含我们在 64 位操作系统上寻找的范围内的零。所以结果呢BBBBB-BBBBB-BBBBB-BBBBB-BBBBB
。为什么会这样,我该如何解决这个问题?
public static string LicenseCDKey
{
get
{
try
{
byte[] rpk = (byte[])Registry.LocalMachine
.OpenSubKey(@"Software\Microsoft\Windows NT\CurrentVersion")
.GetValue("DigitalProductId");
string serial = "";
const string possible = "BCDFGHJKMPQRTVWXY2346789";
for (int i = 0; i < 25; i++)
{
int accu = 0;
for (int a = 0; a < 15; a++)
{
accu <<= 8;
accu += rpk[66 - a];
rpk[66 - a] = (byte)(accu / 24 & 0xff);
accu %= 24;
}
serial = possible[accu] + serial;
if (i % 5 == 4 && i < 24)
{
serial = "-" + serial;
}
}
return serial;
}
catch
{
return ErrorString;
}
}
}