【问题标题】:How to query Win32_Printer for installed remote printer? (Invalid Query)如何查询 Win32_Printer 以获取已安装的远程打印机? (无效查询)
【发布时间】:2019-01-17 12:24:59
【问题描述】:

我在尝试从 Win32_Printer 获取本地安装的远程打印机信息时收到 Invalid Query 错误。

string query = "SELECT * from Win32_Printer WHERE Name = '\\\\Server\\PrinterName'";

ManagementScope scope = new ManagementScope(ManagementPath.DefaultPath);
SelectQuery objQuery = new SelectQuery(query);
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, objQuery))
using (ManagementObjectCollection coll = searcher.Get())
{
   foreach (ManagementObject printer in coll)
   {
      foreach (PropertyData property in printer.Properties)
         {
            result.Add(property.Name, property.Value);
         }
    }
}

我知道这个名字 '\\\\Server\\PrinterName' 从 System.Drawing.Printing.PrinterSettings.InstalledPrinters。

如果我将查询更改为

"SELECT * from Win32_Printer WHERE Name LIKE '%PrinterName'"

它有效,但我如何查询全名?

【问题讨论】:

  • 您是否尝试过不使用转义路径,即\\Server\PrinterName
  • @stuartd 按预期获得无法识别的转义序列...
  • 哦,是的。对不起,笨。
  • @stuartd 对不起,如果这太苛刻了,那不是我的本意。谢谢你的建议。
  • \ 是 C# 和 WMI 中的转义字符。要么再次加倍反斜杠,要么(更理智地)使用 @ 绕过 C# 转义:string query = @"SELECT * from Win32_Printer WHERE Name = '\\\\Server\\PrinterName'";

标签: c# .net wmi-query


【解决方案1】:

正如@JeroenMostert 的评论,'\' 字符在 c# 和 wmi 中都是转义字符,因此解决方案是将它们加倍。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 2014-04-01
    • 1970-01-01
    相关资源
    最近更新 更多