0

我在客户的 PC 上安装了一个软件,我根据客户的 CPU ID 和主板 ID 将许可证密钥提供给客户。此代码在大多数 PC 上都能正常工作,但有时会返回错误的 CPU 或 MB 值,例如:

CPU ID = “0000000000000000”</p>

MB = “” // 空字符串

string results = string.Empty;
string cpuID = string.Empty;

ManagementClass mc = new ManagementClass("win32_processor");
ManagementObjectCollection moc = mc.GetInstances();

foreach (ManagementObject mo in moc)
  {
    cpuID += mo.Properties["processorID"].Value.ToString();
  }
  
results += cpuID;

//get motherboard ID:
string mbID = string.Empty;

string query = "SELECT * FROM Win32_BaseBoard";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
foreach (ManagementObject info in searcher.Get())
  {
    mbID += info.GetPropertyValue("SerialNumber").ToString();
  }

results += "\r\n" + mbID;

return results;

我处境艰难,因为这个问题很少见,我制作了大约 100 个许可证,而这种情况只发生了 5 次,它发生在客户端 PC 上而不是我的 PC 上,所以尝试新代码真的很难。请问有什么想法吗?或者有人知道可能的原因是什么。谢谢

4

1 回答 1

0

它可以是许多组件,并且使用您拥有的代码,您最多可以得到最后一个值,因为您没有使用string.concat()或存储在字符串列表中。所以我的猜测是,您正在获取具有空值的组件列表的最后一个元素,或者当您尝试从值列表中检索单个值时出现错误。例如,如果计算机有多个处理器,则可能是

mo.Properties["processorID"].Value.ToString()

因为您有多个值而出错,因此您的代码会跳过整个块,并且两个字符串 'results' 和 'cpuID' 将保持为空。这只是猜测,但我的建议是尝试在具有多个处理器的计算机中调试您的代码,看看会发生什么。

于 2021-11-22T14:37:39.143 回答