C#中MSFT_Disk的ManagementObject路径报错“Invalid object path”问题咨询
WMI ManagementObject 实例路径的正确用法
传统CIMV2命名空间(root\CIMV2)的写法
以Win32_DiskDrive为例,它的DeviceID是字符串类型,所以实例路径里必须用单引号把属性值包起来,格式是Win32_DiskDrive.DeviceID='<设备ID>'。你的这段代码写法是对的:
// 获取指定物理磁盘上的逻辑驱动器数量 int n = 0; var id = "\\.\\PHYSICALDRIVE0"; var disk = new ManagementObject("Win32_DiskDrive.DeviceID=" + "'" + id + "'"); foreach (ManagementObject dp in disk.GetRelated("Win32_DiskPartition")) { foreach (ManagementObject ld in dp.GetRelated("Win32_LogicalDisk")) ++n; }
Storage命名空间(root\Microsoft\Windows\Storage)的写法
MSFT_Disk的Number属性是整数类型,整数类型的属性值不能加单引号,这就是你代码报错“Invalid object path”的核心原因。
错误写法:root\\Microsoft\\Windows\\Storage:MSFT_Disk.Number='0'(给整数属性值加了单引号)
正确写法:root\\Microsoft\\Windows\\Storage:MSFT_Disk.Number=0
修正后的代码:
// 获取指定物理磁盘上的逻辑驱动器数量 int n = 0; var id = "0"; ManagementObject disk = new ManagementObject("root\\Microsoft\\Windows\\Storage:MSFT_Disk.Number=" + id); foreach (ManagementObject dp in disk.GetRelated("MSFT_Partition")) { foreach (ManagementObject ld in dp.GetRelated("MSFT_Volume")) ++n; }
通用语法规则
- 字符串类型属性:必须用单引号包裹属性值,比如
DeviceID='\\\\.\\\\PHYSICALDRIVE0' - 数值类型(整数、浮点数等)属性:直接写属性值,不需要加单引号,比如
Number=0 - 非默认命名空间:要在类名前加上
命名空间:前缀,格式为命名空间:类名.属性=值
内容的提问来源于stack exchange,提问作者galileo
相关产品推荐
相关产品推荐

