【发布时间】: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'";