1

我有一个带有 SQL Server 的 C#.net Windows 窗体应用程序。我的应用程序通过本地网络在多个用户中使用。现在我需要找到安装 sql server 的硬盘的硬盘序列号(注意:通过使用 C#.net 应用程序数据源)。

如何找到应用程序数据源抛出的硬盘序列号?

4

3 回答 3

0

您需要求助于 WMI。使用 SQL Server 计算机上的适当权限,您可以获得其上硬盘驱动器的序列号。有关使用 WMI 检索硬盘序列号的示例,请参见此处。

您需要弄清楚哪个磁盘保存 SQL Server 以及如何自行访问 SQL Server 机器。

于 2012-07-16T08:57:49.213 回答
0

这可能有用

using System;
using System.Management;
using System.Collections;

namespace WmiControl
{
    public class WMI
    {
        public bool GetDiskSerial(string Computername)
        {

            try
            {
                ManagementScope scope = new ManagementScope(@"\\" + Computername + @"\root\cimv2");
                scope.Connect();
                ArrayList hdCollection;
                ManagementObjectSearcher searcher;
                if (GetDiskDrive(scope, out hdCollection, out searcher) || GetDiskSerial(scope, hdCollection, ref searcher))
                    return true;
                else 
                    return false;
            }
            catch (ManagementException)
            {
                return false;
            }

        }

        private bool GetDiskSerial(ManagementScope scope, ArrayList hdCollection, ref ManagementObjectSearcher searcher)
        {
            try
            {


                ObjectQuery query1 = new ObjectQuery("SELECT * FROM Win32_PhysicalMedia");

                searcher = new ManagementObjectSearcher(scope, query1);
                int i = 0;
                string sDiskSerial = "";
                foreach (ManagementObject wmi_HD in searcher.Get())
                {
                    // get the hard drive from collection
                    // using index
                    if (i < hdCollection.Count)
                    {
                        HardDrive hd = (HardDrive)hdCollection[i];
                        if (wmi_HD["SerialNumber"] == null)
                            hd.SerialNo = "";
                        else
                            hd.SerialNo = wmi_HD["SerialNumber"].ToString();
                    }
                    ++i;
                }
                foreach (HardDrive hd in hdCollection)
                {
                    if (!String.IsNullOrEmpty(hd.SerialNo))
                    {
                        sDiskSerial = hd.SerialNo;
                        break;
                    }
                }
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        private bool GetDiskDrive(ManagementScope scope, out ArrayList hdCollection, out ManagementObjectSearcher searcher)
        {
            try
            {
                ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_DiskDrive");
                hdCollection = new ArrayList();
                searcher = new ManagementObjectSearcher(scope, query);
                foreach (ManagementObject wmi_HD in searcher.Get())
                {
                    HardDrive hd = new HardDrive();
                    hd.Model = wmi_HD["Model"].ToString();
                    hd.Type = wmi_HD["InterfaceType"].ToString();
                    hdCollection.Add(hd);
                    return true;
                }
                return true;
            }
            catch (Exception)
            {
                hdCollection = null;
                searcher = null;
                return false;
            }
        }
    }
    class HardDrive
    {
        private string model = null;
        private string type = null;
        private string serialNo = null;
        public string Model
        {
            get { return model; }
            set { model = value; }
        }
        public string Type
        {
            get { return type; }
            set { type = value; }
        }
        public string SerialNo
        {
            get { return serialNo; }
            set { serialNo = value; }
        }
    }
}

请参阅此处了解更多信息

您可能还想学习 CLR

于 2012-07-16T09:02:35.230 回答
0

您必须分 3 个阶段完成:

  • 数据源的连接字符串为您提供安装 SQL Server 的计算机的名称
  • 然后,您必须查询计算机以找出安装了 SQL Server 的驱动器
  • 然后您可以在这里使用其他人提供的代码来获取序列号
于 2012-07-16T09:06:54.107 回答