WMI Win32_Printer 未显示在 =>控制面板\所有控制面板项\设备和打印机中

Posted

技术标签:

【中文标题】WMI Win32_Printer 未显示在 =>控制面板\\所有控制面板项\\设备和打印机中【英文标题】:WMI Win32_Printer not showing up in =>Control Panel\All Control Panel Items\Devices and PrintersWMI Win32_Printer 未显示在 =>控制面板\所有控制面板项\设备和打印机中 【发布时间】:2016-06-15 18:38:44 【问题描述】:

=>控制面板\所有控制面板项\设备和打印机中有一台本地打印机。我通过单击“删除设备”手动删除了它。并且打印机确实被移除了,不再出现。

问题是,我们有下面的 .net 代码来检查是否安装了打印机。它返回真。如果我们按名称执行“SELECT * FROM Win32_Printer”,打印机似乎仍然存在。

问题:

1) 谁能给我更多的细节,为什么本地打印机记录仍然存在?

2) 我可以信任下面的代码,还是需要更多条件来检查打印机安装?

ManagementScope oManagementScope = new ManagementScope(ManagementPath.DefaultPath);
oManagementScope.Connect();
SelectQuery oSelectQuery = new SelectQuery();
oSelectQuery.QueryString = @"SELECT * FROM Win32_Printer WHERE Name = '" +  sPrinterName.Replace("\\", "\\\\") + "'";
using(ManagementObjectSearcher oObjectSearcher = new ManagementObjectSearcher(oManagementScope, oSelectQuery))

    using(ManagementObjectCollection oObjectCollection = oObjectSearcher.Get())
    
        return oObjectCollection.Count > 0;
    

【问题讨论】:

【参考方案1】:

经过深入研究,顺便说一句,我的 windows 是 8.1。

1) 问题仍然有效。 (欢迎任何 cmets)。我的猜测是:当我移除打印机时,发生了一些错误,并且当窗口填充打印机列表时,错误会阻止其他打印机出现。

2) 我以前检查打印机安装的方法是有效的。删除打印机时,打印机驱动程序或窗口中一定存在错误/权限问题。

我的解决方案对于这种情况(如果您尝试安装打印机,它说打印机已经存在并且没有显示在打印机列表中),您可以试试这个:

1) 打开windows powershell,运行Get-Printer,它会列出所有的打印机,和控制面板中的打印机列表比较,记住哪一个少了。 Microsoft Get-Printer instruction

2) 使用相同的 powershell,按名称运行 Remove-Printer,删除未显示的打印机。 Microsoft Remove-Printer instruction

3)尝试重新安装打印机。

在我的情况下,在我重新安装打印机然后将其删除后,一切恢复正常。我找不到任何信息可以确认问题和解决方法。但它确实存在。希望它可以帮助一些身体。祝你好运。

【讨论】:

【参考方案2】:

Win32_Printer 派生自 CIM_Printer,而 CIM_LogicalDevice 派生自 CIM_LogicalDevice。所以点在任何这些表中都有打印机信息的残留物。如果您想确定,请在运行删除代码后检查下表:

CIM_LogicalDevice Win32_PnpEntity

您也可以使用下面提到的查询来删除打印机。我还没有未测试

$wshNetwork = New-Object -ComObject WScript.Network
$wshNetwork.RemovePrinterConnection("\\prntsvr01\myprinter")

【讨论】:

此案很难重现。如果我再次看到这个案例,我会试试你提供的表格。非常感谢。

以上是关于WMI Win32_Printer 未显示在 =>控制面板\所有控制面板项\设备和打印机中的主要内容,如果未能解决你的问题,请参考以下文章

Win32_Printer 远程 WMI 查询真的很慢

使用应用程序池标识在 IIS 上的 ASP.NET 中查询 Win32_Printer 时权限被拒绝

wmi.WMI().Win32_ComputerSystem()

wmi使用的win32类库名

WMI:获取已安装软件的列表

Win32_Printer 类 PrinterStatus "6 (0x6) Stopped printing" 是啥意思?