WMI查询单引号转义咨询:解决Invalid object path异常
WMI查询中转义单引号的正确方法
你碰到的Invalid object path异常,本质是WQL语法的字符串包裹规则导致的冲突——WQL里字符串必须用单引号'包裹,当你的路径字符串本身包含单引号时,解析器会把它当成字符串的结束标记,自然就报错了。
解决这个问题的核心规则很简单:在WQL中,用两个连续的单引号''来转义单个单引号'。
具体实现步骤
- 先对包含单引号的路径字符串做转义处理,把每个
'替换成'' - 再将转义后的字符串拼接到查询语句中
修改后的代码示例
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
相关产品推荐
相关产品推荐

