WMI以编程方式转义字符串变量上的字符

时间:2014-02-26 23:47:06

标签: c# wmi wmi-query

我有这个有效的查询

ManagementObject pnpdevice = new ManagementObjectSearcher(String.Format(
"select * from Win32_PnPEntity where DeviceID='{0}'",
"USB\\\\VID_046D&PID_C52B&MI_00\\\\6&48E0D58&0&0000")).First();

我刚刚意识到我需要使用四倍斜线作为一个斜杠:两个用c#转义,两个用wmi转义。

我的问题是如何以编程方式而不是手动方式执行此操作。通常我当然会使用字符串前面的@来逃避,所以这也有效:

ManagementObject pnpdevice = new ManagementObjectSearcher(String.Format(
"select * from Win32_PnPEntity where DeviceID='{0}'",
@"USB\\VID_046D&PID_C52B&MI_00\\6&48E0D58&0&0000")).First();

但我如何使用字符串变量?

ManagementObject pnpdevice = new ManagementObjectSearcher(String.Format(
"select * from Win32_PnPEntity where DeviceID='{0}'",
device["DeviceID"].ToString())).First();

这没有我需要的任何转义,并且作为无效查询失败。写它@device["DeviceID"].ToString()不起作用。

任何想法?

1 个答案:

答案 0 :(得分:0)

我很笨,很容易,只需要在字符串中添加替换。

ManagementObject pnpdevice = new ManagementObjectSearcher(String.Format(
    "select * from Win32_PnPEntity where DeviceID='{0}'",
    @device["DeviceID"].ToString().Replace("\\", "\\\\") )).First();