首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

获取磁盘序列号,出现未将对象引用到设置的实例的有关问题

2012-09-29 
获取磁盘序列号,出现未将对象引用到设置的实例的问题?代码如下:using Systemusing System.Collections.Ge

获取磁盘序列号,出现未将对象引用到设置的实例的问题?
代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Management;

namespace Ex189_读取磁盘序列号
{
  public partial class Form1 : Form
  {
  public Form1()
  {
  InitializeComponent();
  }

  private void Form1_Load(object sender, EventArgs e)
  {
  try
  {
  string hardDiskID = null;
  ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_logicaldisk");
  foreach (ManagementObject id in searcher.Get())
  {
  hardDiskID = id.GetPropertyValue("VolumeSerialNumber").ToString().Trim();
  this.label1.Text += string.Format("磁盘序列号为{0} \t\n", hardDiskID);
  }
  }
  catch (Exception ex)
  {
  MessageBox.Show(ex.Message);
  }
  }  
  }
}

[解决办法]

C# code
        //获取硬盘的物理id号        public static string getDiskMac()        {            try            {                  string HDid = null;                  ManagementClass cimobject = new ManagementClass("Win32_DiskDrive");                   ManagementObjectCollection moc = cimobject.GetInstances();                   foreach(ManagementObject mo in moc)                   {                       HDid = (string)mo.Properties["PNPDeviceID"].Value;                      break;                }                return HDid;            }            catch            {                return "";            }        }
[解决办法]
对于一些比如光驱之类的介质,当还没有被加载时,GetPropertyValue("VolumeSerialNumber")会返回null,直接ToString()自然会报错。
object o = id.GetPropertyValue("VolumeSerialNumber");
if(o != null)
{
hardDiskID = o.ToString().Trim();
this.label1.Text += string.Format("磁盘序列号为{0} \t\n", hardDiskID);
}
[解决办法]
C# code
  private List<string> GetMoc()            {                List<string> str_list = new List<string>();                ManagementClass mcCpu = new ManagementClass("win32_Processor");                //ManagementObjectCollection mocCpu = mcCpu.GetInstances();                //foreach (ManagementObject m in mocCpu)                //{                //    str[0] = m["ProcessorId"].ToString();                //}                ManagementClass mcHD = new ManagementClass("win32_logicaldisk");                ManagementObjectCollection mocHD = mcHD.GetInstances();                foreach (ManagementObject m in mocHD)                {                                       str_list.Add(m["DeviceID"].ToString() + ":" + m["VolumeSerialNumber"].ToString());                }                return str_list;            } 

热点排行