【问题标题】:WMI escape characters on string variable programatically以编程方式对字符串变量进行 WMI 转义字符
【发布时间】:2014-02-26 23:47:06
【问题描述】:

我有这个工作查询

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() 不行。

有什么想法吗?

【问题讨论】:

    标签: c# wmi wmi-query


    【解决方案1】:

    我很笨,很简单,只需要在字符串中添加一个替换即可。

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

    【讨论】:

    • 仅供参考,这永远行不通。 ManagementObjectSearcher不是集合,不继承IEnumberable,所以不能调用First()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多