【发布时间】:2022-09-25 09:47:15
【问题描述】:
这种形式的 ManagementObject(使用 \".DeviceID=\")分配有效:
// get number of logical drives on given physical disk
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;
}
这种形式的 ManagementObject(使用 \".Number=\")分配失败:
// get number of logical drives on given physical disk
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;
}
例外是“无效的对象路径”。我花了令人尴尬的时间试图弄清楚我做错了什么......并且不知道。
此处搜索的特定项目不是相关问题。使用这两个语句的正确语法是我想要理解的......
工作案例的路径是:\"root\\CIMV2\",失败案例的路径是:\"root\\Microsoft\\Windows\\Storage\"。
失败的语句是: \"foreach (ManagementObject dp in disk.GetRelated(\"MSFT_Partition\"))\"
-
也许在将对象路径传递给
ManagementObject之前将其存储为字符串,这样您就可以调试并确保路径正确。 -
另请提供错误上下文。哪条线抛出错误?
-
只是一个猜测,也许数字不需要引号,ID 会。
-
工作案例的路径是:\"root\\CIMV2\",失败案例的路径是:\"root\\Microsoft\\Windows\\Storage\"。失败的语句是:\"foreach (ManagementObject dp in disk.GetRelated(\"MSFT_Partition\"))\"
-
在为特定实例构造
ManagementObject时,路径必须使用关键属性.在MSFT_Diskclass 中,Number不是关键属性,但ObjectId是,因此请尝试使用它来引用它。Win32_DiskDrive.DeviceID有效,因为这是一个关键属性。
标签: c# .net wmi system.management