none
获取硬盘序号,调试时可以,发布不行 RRS feed

  • 问题

  • 使用如下代码获取硬盘序号,调试的时候是可以的,可是发布的时候,就不行了,获取不到硬盘序号,请问如何解决,是不是权限问题,如果是有什么办法可以解决,谢谢
        public String GetHardDiskID()
        {
            try
            {
                ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_PhysicalMedia");
                String strHardDiskID = null;
                foreach (ManagementObject mo in searcher.Get())
                {
                    strHardDiskID = mo["SerialNumber"].ToString().Trim();
                    break;
                }
                return strHardDiskID;
            }
            catch
            {
                return "";
            }
        }

    2010年8月5日 2:35

答案

全部回复

  • 我在网上查了下有WIN32_DiskDrive,这个我参考了MSDN上的介绍,也确实有SerialNumber这个属性,但是我在C#下面调用的时候提示找不到

    写法应该是没有问题的,因为我获取其他几个属性都是可以的没有问题,就这个找不到,请问如何解决

    或者能提供一个能在C#下获取SerialNumber的方法,谢谢!

    2010年7月27日 8:18
  • 有没有试过用 Server Explorer 去 Invoke 这个 SerialNumber 属性?我刚才试了一下,在 \Win32_DiskDrive 下的设备列表中没有找到 SerialNumber。找到一个 Model 的属性,可能这个对您有用。


    Mark Zhou
    2010年7月27日 9:13
  • http://www.pconline.com.cn/pcjob/process/other/others/0410/471619.html

     

    //取第一块硬盘编号
      public String GetHardDiskID()
      {
       try
       {
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
        String strHardDiskID = null ;
        foreach(ManagementObject mo in searcher.Get())
        {   
         strHardDiskID = mo["SerialNumber"].ToString().Trim();
         break;         
        }
        return strHardDiskID ;
       }
       catch
       {
        return "";
       }
      }//end

    2010年7月27日 9:41
  • 你好!

        尝试一下这个方法:

    String HDid;
    ManagementClass cimobject = new ManagementClass("Win32_DiskDrive");
    ManagementObjectCollection moc = cimobject.GetInstances();
    foreach(ManagementObject mo in moc)
    {
    HDid = (string)mo.Properties["Model"].Value;

    MessageBox.Show(HDid );
    }


    周雪峰
    2010年8月1日 9:34
    版主
  • 2楼的可用,谢谢!

    2010年8月2日 3:56
  • 2楼您好,我用VS2008做的一个ASP.NET程序,调试的时候都是可以的,能够获取

    可以是发布之后生成网站就不能够获取到了,请问如何解决,谢谢!

    2010年8月5日 2:30
  • 调试的时候是以当前用户身份运行的,发布出来是匿名帐号。你可以采用模拟的方法(web.config里配置)


    【孟子E章】
    • 已建议为答案 DK. Da 2010年8月5日 9:09
    • 已标记为答案 燕过无声 2010年8月5日 15:16
    2010年8月5日 7:00
    版主
  • ASP.NET 服务器上运行的网站的用户凭据 (User Credential) 可能没有足够的权限访问 WMI 对象。本机调试时,用的是当前登录的用户凭据,或者 LOCAL SYSTEM。

    您需要检查 IIS 上的 Application Pool 上的 Application Identity,改成某个具备权限的用户,或者利用 web.config 进行 Inpersonation。


    Mark Zhou
    2010年8月6日 7:58
  • 我用 ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_PhysicalMedia");
    来获取硬盘序列号,现在发现一个问题

    我在win7下获取的结果和XP下获取的不同,请问这是怎么回事!

    2010年8月9日 14:56
  • 我在WIN7下运行C#做的获取硬盘序号跟用VC做的程序获取的结果一样,但是在XP下获取的不同

    实际硬盘序号应该是 5VC7KTCG

    C# 在XP下是  V57CTKGC , 在WIN7下是 5VC7KTCG  (同一程序)

    VC做的在XP和WIN7下都是 5VC7KTCG

     

     

    2010年8月10日 6:28
  • 如果说是权限问题,如何解决谢谢

     

    2010年8月10日 6:28
  • 你好!

        尝试一下这个方法:

    String HDid;
    ManagementClass cimobject = new ManagementClass("Win32_DiskDrive");
    ManagementObjectCollection moc = cimobject.GetInstances();
    foreach(ManagementObject mo in moc)
    {
    HDid = (string)mo.Properties["Model"].Value;

    MessageBox.Show(HDid );
    }


    周雪峰
    这个获取的硬盘的型号ID,不是SerialNumber
    帮助大家解决问题咯~~小站:http://www.cnblogs.com/knightluffy/
    2012年1月5日 10:09