在>控制面板\所有控制面板项目\设备和打印机中有一台本地打印机。我通过点击"删除设备"手动删除它。并且打印机确实被移除了,不再出现了。
问题是,我们在下面有.net代码来检查是否安装了打印机。它返回true。如果我们选择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;
}
}
答案 0 :(得分:0)
1)问题仍然有效。 (欢迎任何评论)。我的猜测是:当我移除打印机时,发生了一些错误,并且错误会阻止其他打印机显示,而窗口会填充打印机列表。
2)我以前检查打印机安装的方式是有效的。移除打印机时,打印机驱动程序或窗口中必定存在错误/权限问题。
我的解决方案对于这种情况(如果您尝试安装打印机,它说打印机已存在且未显示在打印机列表中),您可以尝试这样做:
1)打开windows powershell,运行Get-Printer,列出所有打印机,将其与控制面板中的打印机列表进行比较,记住缺少哪一台。 Microsoft Get-Printer instruction
2)使用相同的PowerShell,按名称运行Remove-Printer,删除未显示的打印机。 Microsoft Remove-Printer instruction
3)尝试重新安装打印机。
在我的情况下,我重新安装打印机然后将其删除后,一切恢复正常。我无法找到任何可以确认问题和解决方法的信息。但确实存在。希望它可以帮助一些身体。祝你好运。
答案 1 :(得分:0)
Win32_Printer派生自CIM_Printer
,派生自CIM_LogicalDevice
。因此,在某些方面,在任何这些表中都存在打印机信息的残余。如果您想确定,请在运行删除代码后检查下面提到的表格:
- CIM_LogicalDevice
- Win32_PnpEntity
您还可以使用下面提到的查询删除打印机。我还没有没有测试。
$wshNetwork = New-Object -ComObject WScript.Network
$wshNetwork.RemovePrinterConnection("\\prntsvr01\myprinter")