//获取CPU序列号
            string cpuInfo = string.Empty;
            ManagementClass mc1 = new ManagementClass("Win32_Processor");
            ManagementObjectCollection moc = mc1.GetInstances();
            foreach (ManagementObject mo in moc)
            {
                cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
            }
            this.label1.Text = "cpu序列号:" + cpuInfo.ToString();
            //获取硬盘  
            String HDid;
            ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive");
            ManagementObjectCollection moc1 = cimobject1.GetInstances();
            foreach (ManagementObject mo in moc1)
            {
                HDid = (string)mo.Properties["Model"].Value;
                this.label1.Text = "硬盘序列号:" + HDid.ToString();
            }
            //获取网卡硬件地址  
            ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
            ManagementObjectCollection moc2 = mc.GetInstances();
            foreach (ManagementObject mo in moc2)
            {
                if ((bool)mo["IPEnabled"] == true)
                    this.label3.Text = "MAC address\t{0}" + mo["MacAddress"].ToString();
                mo.Dispose();
            }
硬盘和网卡都可以获得,只有CPI那里说未将对象引用到实力.谁能告诉下为什么

解决方案 »

  1.   

    foreach (ManagementObject mo in moc)
    {
        if(mo.Properties["ProcessorId"]!=null)
            cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
      

  2.   

    cpuInfo = mo.Properties["ProcessorId"].Value.ToString(); 
    未将对象引用到实例
      

  3.   

    我试了一下,代码没有什么问题using System.Windows.Forms;
    using System.Management;   namespace CSharp_APP_Test
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                //获取CPU序列号 
                string cpuInfo = string.Empty;
                ManagementClass mc1 = new ManagementClass("Win32_Processor");
                ManagementObjectCollection moc = mc1.GetInstances();
                foreach (ManagementObject mo in moc)
                {
                    cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
                }
                this.label1.Text = "cpu序列号:" + cpuInfo.ToString();        }
        }
    }
      

  4.   

    cpuInfo = mo.Properties["ProcessorId"].Value.ToString(); 
    ---->
    cpuInfo = mo["ProcessorId"].ToString();
      

  5.   

    把value去掉的话我获得是System.Managemant.PropertyData我换个机器在去试下代码
      

  6.   

    不是光把Value去掉
    而是还得去掉Properties
      

  7.   

    using System.Windows.Forms;
    using System.Management;   namespace CSharp_APP_Test
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                //获取CPU序列号 
                string cpuInfo = string.Empty;
                ManagementClass mc1 = new ManagementClass("Win32_Processor");
                ManagementObjectCollection moc = mc1.GetInstances();
                foreach (ManagementObject mo in moc)
                {
                    cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
                }
                this.label1.Text = "cpu序列号:" + cpuInfo.ToString();        }
        }
    }
    试了没问题
      

  8.   

    哪位高手能获得个电脑上的MAC地址或CPU序列号。不是服务器上的。求助啊。代表上苍感谢高手们。急用!