当前位置:编程学习 > C#/ASP.NET >>

获取硬盘的ID号,出现报错.

下面这段代码是获取硬盘的ID号, 在我家里的电脑是没有问题的, 但是在公司的电话就会报错, 说没有实例化对象实例之类的.

家里的电话是比较旧的, 这有关吗? 都是X86.

还一个问题: 是不是每一个硬盘的ID号都在存在的? 是不是每一个硬盘的ID号都不一样的?

我都这个来做判断, 用户只有通过给他本机的硬盘ID号给, 写死在程序中, 就是说只有他本机可以用. 目的防止别人私自传播我的程序.


private string GetSerialNumber()
        {
            ManagementClass mc = new ManagementClass("Win32_PhysicalMedia");
            ManagementObjectCollection moc = mc.GetInstances();
            string strID = null;
            foreach (ManagementObject mo in moc)
            {
                strID = mo.Properties["SerialNumber"].Value.ToString().Trim();
                break;
            }
            return strID;
        }

--------------------编程问答--------------------

       //获取系统驱动器(逻辑分区)信息
        private void button1_Click(object sender, EventArgs e)
        {
            this.listView1.Items.Clear();
            DriveInfo[] MyDrives = DriveInfo.GetDrives();
            try
            {
                foreach (DriveInfo MyDrive in MyDrives)
                {
                    String MyType = "";
                    switch (MyDrive.DriveType)
                    {
                        case DriveType.CDRom:
                            MyType = "光盘设备";
                            break;
                        case DriveType.Fixed:
                            MyType = "固定硬盘";
                            break;
                        case DriveType.Network:
                            MyType = "网络驱动器";
                            break;
                        case DriveType.NoRootDirectory:
                            MyType = "没有根目录";
                            break;
                        case DriveType.Ram:
                            MyType = "RAM磁盘";
                            break;
                        case DriveType.Removable:
                            MyType = "可移动设备";
                            break;
                        case DriveType.Unknown:
                            MyType = "未知设备";
                            break;
                    }
                    if (MyDrive.DriveType == DriveType.Fixed)
                    {
                        String[] MySubItems ={ MyDrive.Name.ToString(),
                            MyDrive.RootDirectory.ToString(),
                            MyDrive.DriveFormat.ToString(),
                            MyType,
                            MyDrive.VolumeLabel.ToString(),
                            (MyDrive.TotalSize/1024/1024).ToString()+"M",
                            (MyDrive.TotalFreeSpace/1024/1024).ToString()+"M",
                            (MyDrive.AvailableFreeSpace/1024/1024).ToString()+"M"};
                        ListViewItem MyItem = new ListViewItem(MySubItems);
                        this.listView1.Items.Add(MyItem);
                    }
                    else
                    {
                        String[] MySubItems ={ MyDrive.Name,
                            MyDrive.RootDirectory.FullName,
                            "",MyType,"","","",""};
                        ListViewItem MyItem = new ListViewItem(MySubItems);
                        this.listView1.Items.Add(MyItem);
                    }                
                }
            }
            catch (Exception MyEx)
            {
                MessageBox.Show(MyEx.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }


--------------------编程问答-------------------- 需要考虑IDE硬盘和scsi硬盘的不同处理,scsi硬盘的你的方法不一定能获取 --------------------编程问答--------------------     ManagementClass mc = new ManagementClass("Win32_Local");
--------------------编程问答--------------------
引用 2 楼 shagu 的回复:
需要考虑IDE硬盘和scsi硬盘的不同处理,scsi硬盘的你的方法不一定能获取
+1 --------------------编程问答-------------------- .NET获取硬盘序列号的几个方法 --------------------编程问答--------------------
  //获取硬盘ID
   String HDid;
   ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive");
   ManagementObjectCollection moc1 = cimobject1.GetInstances();
   foreach(ManagementObject mo in moc1)
   {
    HDid = (string)mo.Properties["Model"].Value;
    Response.Write ("硬盘序列号:"+HDid.ToString ());
   }

试试这段代码吧 --------------------编程问答-------------------- S.M.A.R.T --------------------编程问答-------------------- 一楼的那个我怎么运行不起来,运行时也是报同样的错,有没有高手指点下。
  --------------------编程问答-------------------- Win32_Local,Win32_DiskDrive这些是什么?我是新人请各位大侠高手多多帮助。 --------------------编程问答-------------------- 如果出现异常,换用Win32_DiskDrive方式读取,结果是一样的。


                //读取硬盘大小信息 
                  SelectQuery HDDQuery = new SelectQuery("Win32_DiskDrive");
                ManagementObjectSearcher HDDSearch = new ManagementObjectSearcher(HDDQuery);
                foreach (ManagementObject HDDInfo in HDDSearch.Get())
                {
                       string txt_HDD = HDDInfo["SerialNumber"];
                       break;
                }
--------------------编程问答-------------------- http://msdn.microsoft.com/en-us/library/aa394132(v=vs.85).aspx授之与渔 --------------------编程问答--------------------
引用 6 楼 dreamrising 的回复:
C# code
  //获取硬盘ID
   String HDid;
   ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive");
   ManagementObjectCollection moc1 = cimobject1.GetInstances();
   foreach(ManagementObject……

这个可以,但是获取的是两个属性,难道第一个一定是ID号吗?能不能准确只得到ID号?
WDC WD1600AAJS-00B4A0
A-DATA USB Flash Drive USB Device --------------------编程问答--------------------
引用 10 楼 tsapi 的回复:
如果出现异常,换用Win32_DiskDrive方式读取,结果是一样的。
C# code


                //读取硬盘大小信息 
                  SelectQuery HDDQuery = new SelectQuery("Win32_DiskDrive");
                ManagementObjectSearcher HDDS……

不行,提示找不到。 --------------------编程问答--------------------
引用 3 楼 wangjun8868 的回复:
    ManagementClass mc = new ManagementClass("Win32_Local");


找不到。 --------------------编程问答--------------------
引用 12 楼 xiaocai0923 的回复:
引用 6 楼 dreamrising 的回复:

C# code
//获取硬盘ID
String HDid;
ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection moc1 = cimobject1.GetInstances();
foreach……

这样获取到之后,你可以自己再处理一下啊 --------------------编程问答-------------------- 我碰到过这种问题,我的是因为操作系统问题,在win2003、vista下怎么也读不出来,xp下可以
希望对你有帮助
还有,保护软件为什么不用加密狗,这种方法现在比较通用 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 16 楼 from_taiwan 的回复:
我碰到过这种问题,我的是因为操作系统问题,在win2003、vista下怎么也读不出来,xp下可以
希望对你有帮助
还有,保护软件为什么不用加密狗,这种方法现在比较通用


加密狗听没有听说过,可以防止别人传播的吗?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,