You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 21:55:23