Как предложил Питер Витвоет, здесь есть метод, который возвращает, если 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;
}
РЕДАКТИРОВАТЬ: Я обнаружил, что имя драйвера может быть неправильным некоторое время. Это может быть «Удаленный рабочий стол Easy Print» вместо принтера XPS и некоторых других принтеров, отличных от xps. Поэтому проверка, содержит ли DeviceID XPS, является более безопасным способом.