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

WMI查询单引号转义咨询:解决Invalid object path异常

WMI查询中转义单引号的正确方法

你碰到的Invalid object path异常,本质是WQL语法的字符串包裹规则导致的冲突——WQL里字符串必须用单引号'包裹,当你的路径字符串本身包含单引号时,解析器会把它当成字符串的结束标记,自然就报错了。

解决这个问题的核心规则很简单:在WQL中,用两个连续的单引号''来转义单个单引号'。

具体实现步骤

  1. 先对包含单引号的路径字符串做转义处理,把每个'替换成''
  2. 再将转义后的字符串拼接到查询语句中

修改后的代码示例

string dirName = @"D:\Test't";
// 关键:转义路径里的单引号
string escapedDirName = dirName.Replace("'", "''");
string qry = "associators of {Win32_Directory.Name='" + escapedDirName + "'} where assocclass = Win32_SubDirectory ResultRole = PartComponent";

转义后,原来的D:\Test't会变成D:\Test''t,WMI解析器会自动把连续的两个单引号识别为一个实际的单引号,这样就能正确解析路径了。

额外建议:使用参数化查询更安全

如果想彻底避免手动拼接字符串带来的转义问题(还能防止潜在的WQL注入风险),推荐使用WMI的参数化查询,它会自动帮你处理转义逻辑:

string dirName = @"D:\Test't";
ManagementObjectSearcher searcher = new ManagementObjectSearcher();
// 用?作为参数占位符
searcher.Query = new ObjectQuery("associators of {Win32_Directory.Name=?} where assocclass = Win32_SubDirectory ResultRole = PartComponent");
// 传入参数值,无需手动转义
searcher.QueryParameters.Add(dirName);

// 执行查询并处理结果
foreach (ManagementObject obj in searcher.Get())
{
    Console.WriteLine(obj["Name"]);
}

内容的提问来源于stack exchange,提问作者Mohamed Jahangir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:08:36