一段获取硬盘序列号的代码,哪里错了

dz215136304 2012-05-22 05:42:32
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 显示cpu信息
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_PhysicalMedia");
String strHardDiskID = null;
foreach (ManagementObject mo in searcher.Get()) {
strHardDiskID = mo["SerialNumber"].ToString().Trim();
break;
}
textBox8.Text = strHardDiskID;
}


}
}


strHardDiskID = mo["SerialNumber"].ToString().Trim();这行报错,提示:未将对象引用设置到对象的实例。
...全文
197 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
leefwu 2012-05-23
  • 打赏
  • 举报
回复
在本机试了可以获取
环境XP,VS2008
黑哥 2012-05-23
  • 打赏
  • 举报
回复
为什么不判断 mo["SerialNumber"] 是否 null 呢?
dz215136304 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
这个依赖于服务。而且是可以随意改的(有专业改CPUID,MAC,硬盘 这些的工具)。

mObject["SerialNumber"].ToString()这样写代码本身就是不负责任。
result +=mObject["SerialNumber"]==null?string.Empty: mObject["SerialNumber"].ToString() + " ";
[/Quote]

那别的有什么好的方法呢?就是直接读取硬盘序列号,我这样写,返回的数据是空的(null),麻烦贴下代码
dz215136304 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]
引用 12 楼 的回复:

引用 9 楼 的回复:
引用 8 楼 的回复:

引用 7 楼 的回复:
引用 5 楼 的回复:

引用 2 楼 的回复:
引用楼主 的回复:
C# code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Da……
[/Quote]

找到原因了 这个写 根本无法找到硬盘序列号,返回的数据是空
dz215136304 2012-05-23
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
为什么不判断 mo["SerialNumber"] 是否 null 呢?
[/Quote]

为什么会获取不到硬盘的序列号呢
足球中国 2012-05-22
  • 打赏
  • 举报
回复
这个依赖于服务。而且是可以随意改的(有专业改CPUID,MAC,硬盘 这些的工具)。

mObject["SerialNumber"].ToString()这样写代码本身就是不负责任。
result +=mObject["SerialNumber"]==null?string.Empty: mObject["SerialNumber"].ToString() + " ";
EnForGrass 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

引用 9 楼 的回复:
引用 8 楼 的回复:

引用 7 楼 的回复:
引用 5 楼 的回复:

引用 2 楼 的回复:
引用楼主 的回复:
C# code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using Sys……
[/Quote]
应该不会吧,我用的是VS2008
dz215136304 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
引用 8 楼 的回复:

引用 7 楼 的回复:
引用 5 楼 的回复:

引用 2 楼 的回复:
引用楼主 的回复:
C# code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
u……
[/Quote]


我也是在xp下啊 vs是2010版 。net是 3.5 ,会不会是vs版本的问题呢?
dz215136304 2012-05-22
  • 打赏
  • 举报
回复
会不会是vs版本的问题呢?
dz215136304 2012-05-22
  • 打赏
  • 举报
回复
我也是在xp下啊 vs是2010版 。net是 3.5
EnForGrass 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 7 楼 的回复:
引用 5 楼 的回复:

引用 2 楼 的回复:
引用楼主 的回复:
C# code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.L……
[/Quote]
是的啊,你是在Win7下吗?我是在XP下

private void Form7_Load(object sender, EventArgs e)
{
string result = "";
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
ManagementObjectCollection moCollection = searcher.Get();
foreach (ManagementObject mObject in moCollection)
{
result += mObject["SerialNumber"].ToString() + " ";
}
textBox1.Text = result;
}
dz215136304 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
引用 5 楼 的回复:

引用 2 楼 的回复:
引用楼主 的回复:
C# code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using Sys……
[/Quote]




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 显示cpu信息
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
string result = "";
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
ManagementObjectCollection moCollection = searcher.Get();
foreach (ManagementObject mObject in moCollection)
{
result += mObject["SerialNumber"].ToString() + " ";
}

textBox8.Text = result;

}


}
}



这是代码 你确定和你的一样么
EnForGrass 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 2 楼 的回复:
引用楼主 的回复:
C# code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
us……
[/Quote]
我这里正常啊
dz215136304 2012-05-22
  • 打赏
  • 举报
回复
没人知道么
dz215136304 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
引用楼主 的回复:
C# code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Wind……
[/Quote]

这个也报错啊 和我的一样
EnForGrass 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

引用楼主 的回复:
C# code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Wi……
[/Quote]
这个格式化硬盘编号会变额
EnForGrass 2012-05-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
C# code
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 S……
[/Quote]

/// <summary>
/// 查询硬盘编号
/// </summary>
/// <returns></returns>
public string GetMainHardDiskId()
{
string result = "";
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
ManagementObjectCollection moCollection = searcher.Get();
foreach (ManagementObject mObject in moCollection)
{
result += mObject["SerialNumber"].ToString() + " ";
}
return result;
}
dz215136304 2012-05-22
  • 打赏
  • 举报
回复
自己顶

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧