0

我有下面的代码,它使用 WMI 获取本地磁盘信息(从我正在学习的另一个站点获取)。无论如何,我创建了所有标签和组合框,并且组合工作正常 - 它显示计算机上的本地磁盘。

但是,当我尝试从 WMI 中为磁盘取回任何内容并显示它时,标签旁边什么也没有显示。WMI 工作正常,因为我可以使用 powershell 来显示 get-wmiobjects,而我带回来的两个对象实际上通过 powershell 显示了一些东西......只是不在这个应用程序上。

有任何想法吗?

namespace diskdrive_info
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //Get all the disk drives
            ManagementObjectSearcher mosDisk = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
            // Loop through each object (disk) retrieved by WMI
            foreach (ManagementObject moDisk in mosDisk.Get())
            {
                cmbHdd.Items.Add(moDisk["Model"].ToString());
            }
        }

        private void cmbHdd_SelectedIndexChanged(object sender,EventArgs e)
        {
            ManagementObjectSearcher mosDisks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE Model = '" + cmbHdd.SelectedItem + "'");
            foreach (ManagementObject moDisk in mosDisks.Get())
            {
                lblType.Text = "Type:" + moDisk["MediaType"].ToString();
                lblModel.Text = "Model: " + moDisk["Model"].ToString();
            }
        }


    }
}
4

2 回答 2

1

那 foreach 运行了多少次?看起来您只是在 .Text 属性上写了很多次,因为 mosDisks.Get() 集合中有元素。.Get() 上次在该循环中运行时是否有可能是空白或 null?

标签中是否显示“类型:”和“型号:”?

还可以尝试在 foreach 中放置断点以查看返回的内容

    moDisk["MediaType"].ToString()
于 2012-09-21T11:02:40.707 回答
0

大声哭泣……想通了!这是我从网络驱动器运行脚本的事实,我注意到当我加载脚本时 VS 出错说从这个位置运行它存在安全风险......所以我将它移到 C: 驱动器和嘿,一切都很好!

于 2012-09-21T13:48:01.580 回答