至于建议由彼得Witvoet,这里是如果是基于驱动程序名称安装或不XPSPrinter返回的方法。
该方法循环打印机,直到它找到一个或它已扫描每一个没有找到一个。 需要在项目中添加对“System.Management”的引用。
private bool GetIfXPSPrinterIsInstalled()
{
bool isXPSPrinterMissing = true;
try
{
var printerQuery = new System.Management.ManagementObjectSearcher("SELECT * from Win32_Printer");
var iterator = printerQuery.Get().GetEnumerator();
while (iterator.MoveNext() && isXPSPrinterMissing)
{
//isXPSPrinterMissing = iterator.Current.GetPropertyValue("DriverName").ToString() != "Microsoft XPS Document Writer";
isXPSPrinterMissing = !iterator.Current.GetPropertyValue("DeviceID").ToString().ToUpper().Contains("XPS");
}
if (isXPSPrinterMissing)
{
MessageBox.Show("Warning, there is no XPS printer installed on this computer");
}
}
catch (Exception ex)
{
MessageBox.Show("System couldn't verify if there is a XPS printer installed because an error occured");
}
return !isXPSPrinterMissing;
}
编辑:我发现驱动程序名称可以是错误的一段时间。它可能是“远程桌面轻松打印”,而不是XPS打印机和其他一些非XPS打印机。因此,检查DeviceID是否包含XPS是一种更安全的方法。
这个名字绝对不可靠。用户可以随时重命名“Microsoft XPS Document Writer”打印队列。 – Jon 2012-03-16 15:55:27