获取硬盘的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;
}
--------------------编程问答--------------------
--------------------编程问答-------------------- 需要考虑IDE硬盘和scsi硬盘的不同处理,scsi硬盘的你的方法不一定能获取 --------------------编程问答-------------------- ManagementClass mc = new ManagementClass("Win32_Local");
//获取系统驱动器(逻辑分区)信息
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);
}
}
--------------------编程问答-------------------- +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方式读取,结果是一样的。
--------------------编程问答-------------------- http://msdn.microsoft.com/en-us/library/aa394132(v=vs.85).aspx授之与渔 --------------------编程问答--------------------
//读取硬盘大小信息
SelectQuery HDDQuery = new SelectQuery("Win32_DiskDrive");
ManagementObjectSearcher HDDSearch = new ManagementObjectSearcher(HDDQuery);
foreach (ManagementObject HDDInfo in HDDSearch.Get())
{
string txt_HDD = HDDInfo["SerialNumber"];
break;
}
这个可以,但是获取的是两个属性,难道第一个一定是ID号吗?能不能准确只得到ID号?
WDC WD1600AAJS-00B4A0
A-DATA USB Flash Drive USB Device --------------------编程问答--------------------
不行,提示找不到。 --------------------编程问答--------------------
找不到。 --------------------编程问答--------------------
这样获取到之后,你可以自己再处理一下啊 --------------------编程问答-------------------- 我碰到过这种问题,我的是因为操作系统问题,在win2003、vista下怎么也读不出来,xp下可以
希望对你有帮助
还有,保护软件为什么不用加密狗,这种方法现在比较通用 --------------------编程问答-------------------- --------------------编程问答--------------------
加密狗听没有听说过,可以防止别人传播的吗?
补充:.NET技术 , C#