0

WMIを使用してローカルディスク情報を取得する以下のコードがあります(学習している別のサイトから取得しました)。とにかく、私はすべてのラベルとコンビボックスを作成しましたが、コンビは正常に機能します。コンピューターにローカルディスクが表示されます。

ただし、選択したディスクのWMIから何かを取得して表示しようとすると、ラベルの横に何も表示されません。Powershellを使用してget-wmiobjectsを表示できるため、WMIは正常に機能し、持ち帰った2つのオブジェクトは、実際には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は何回実行されますか?mosDisks.Get()コレクションに要素があるため、.Textプロパティを何度も上書きしているように見えます。.Get()がそのループで最後に実行されたときに、空白またはnullになる可能性はありますか?

ラベルに「Type:」と「Model:」が表示されていますか?

また、foreachにブレークポイントを設定して、何が返されるかを確認してください

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

大声で叫んでくれて...それを考え出した!ネットワークドライブからスクリプトを実行していたのは事実でした。スクリプトをロードすると、VSがエラーになり、この場所からスクリプトを実行するとセキュリティ上のリスクがあるとのことでした。そこで、スクリプトをC:ドライブに移動しました。ねえ-プレストはすべて大丈夫です!

于 2012-09-21T13:48:01.580 に答える