不知为何,我在vs2005下 无论取CPU序列号还是硬盘序列号等,都要报错,具体错误如下:,同样的代码,同样的电脑,但在vs2010下则可以获取,不知道有高手知道为何不?如何在vs2005下能正常获取cpu等,代码如网上通用代码://获得CPU的序列号
public static string GetCPUSerialNumber()
  {
  string cpuSerialNumber = string.Empty;
  ManagementClass mc = new ManagementClass("Win32_Processor");
  ManagementObjectCollection moc = mc.GetInstances(); //这里报错
  foreach (ManagementObject mo in moc)
  {
  cpuSerialNumber = mo["ProcessorId"].ToString();
  break;
  }
  mc.Dispose();
  moc.Dispose();
  return cpuSerialNumber;
  }  // 取得设备硬盘的卷标号
        public string GetDiskVolumeSerialNumber()
        {
            ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
            ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"d:\"");
            disk.Get();//这里报错
            return disk.GetPropertyValue("VolumeSerialNumber").ToString();
        }
错误信息为:无法在 DLL“wminet_utils.dll”中找到名为“GetCurrentApartmentType”的入口点。 在网上没找到此问题的解决方法,请高手帮忙!

解决方案 »

  1.   

    这个错误的意思,就是说.net 2.0中没有这个函数。要.net3.5以上的版本才有。你用这个函数去求系统CPUID,你的软件可移植性就成问题:用户安装的.net就必须在.net3.5版本以上。建议可以考虑下使用winAPI的方式去取。在网上搜一下VC++获取CPUID的方法。
      

  2.   

    谢谢楼上兄弟,但网上看到很多说.net2.0,甚至1.1都有用这个函数的呢,看来只好用winAPI的方式了
      

  3.   

    但我在2.0下编译好的程序,放到另外的机子上,装了WIN7的,一样可以好好运行呢
      

  4.   

    http://topic.csdn.net/u/20100830/15/231b8123-9167-4f69-980b-a5d82342f77d.html
      

  5.   

    楼上的网址我看过,程序一样在我的机子上要报错,不知为何,我的机子不能运行 ManagementClass 类下的东西,引用了management类的,但在vs2010下又可以,在vs2005下就不行,难道我的.net2.0有问题?别人在2.0下能用不?
      

  6.   

    楼主不要想了,是windows xp的问题 windows xp 的ManagementObject 读取的东西不全
      

  7.   

    我用 winIPI 代码如下:  
    //定义CPU的信息结构
    [StructLayout(LayoutKind.Sequential)]   
    public   struct   CPU_INFO   
    {   
      public uint dwOemId;   
    public uint dwPageSize;   
    public uint lpMinimumApplicationAddress;   
    public uint lpMaximumApplicationAddress;   
    public uint dwActiveProcessorMask;   
    public uint dwNumberOfProcessors;   
    public uint dwProcessorType;   
    public uint dwAllocationGranularity;   
    public uint dwProcessorLevel;   
    public uint dwProcessorRevision;   
    }        [DllImport("kernel32")]
            public static extern void GetSystemInfo(ref CPU_INFO cpuinfo);
      CPU_INFO CpuInfo;
                CpuInfo = new CPU_INFO();
                GetSystemInfo(ref CpuInfo);获取到的  dwOemId 都为0呢
      

  8.   

    采用另外的方法读取硬盘序列号算了,读CPU序列号不好,CMD处理器的读出来又问题,感谢各位!