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