背景:私はアセットデータベースのコンピュータ情報を取得する私たちのユニットのヘルプデスク用のアプリケーションを作成しました。最近、在庫を取っている人は、ユーザーがUSB外付けハードドライブを接続していて、私のアプリがそれをハードドライブの総容量に含めていると言いました。USBドライブを無視してWin32 ManagementObjectsを使用してハードディスクの合計サイズを取得する方法はありますか?
外部/ USBデバイスを無視してWin32 ManagementObjectsを使用してハードドライブの合計サイズを取得するにはどうすればよいですか?
私は、このようなWin32_PhysicalMedia
、Win32_LogicalDisk
、またはWin32_DiskPartition
などの別のWin32ManagementObjects
アイテムを使用して喜んだけど、:
- 私は、全内部ストレージにのみ興味がある(実際には、パーティションを気にしませんか、私はバグがここ
以下のコードであるかを考え出すでより興味
long totalSize = 0;
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32ManagementObjects.Win32_DiskDrive");
// there may be multiple hard drives, so loop through them all
foreach (ManagementObject mo in searcher.Get())
{
/*
* I assume this is where the problem is. I check that the drive type
* includes "FIXED HARD DISK" (see reference link below)
*/
mediaType = mo.Properties["MediaType"].Value.ToString().ToUpper();
if (mediaType.IndexOf("FIXED HARD DISK") >= 0)
{
totalSize += Convert.ToInt64(mo.Properties["Size"].Value.ToString());
}
}
この特定のUSBドライブは、オペレーティングシステムに不正な情報を報告していますか?それは可能ですか?ユーザーのコンピュータがオフサイトになっているため、基本的にはデバッグできません。
参考:https://msdn.microsoft.com/en-us/library/aa394132(v=vs.85).aspx
申し訳ありません。エラーは発生していないので、「間違っている」と判断したため、エラーチェックコードを削除して読みやすくしました。 – Rick
"USB接続SCSI"(USB大容量ストレージと比較してプロトコルオーバーヘッドが大幅に削減されている)について報告されているインターフェイスが不思議です。 –
もちろん、これはFireWireやeSATAなどの他の外部ドライブの識別には役立ちません。 (Thunderbolt、おそらく?)IInspectableに言及されている「除去ポリシー」はよりよいアプローチです。 –