Есть ли способ определить, доступен ли и работает ли Microsoft XPS Document Writer в Системе? - PullRequest
2 голосов
/ 16 марта 2012

Есть ли надежный способ определить, доступен ли и работает ли Microsoft XPS Document Writer в Системе через .Net?

Кроме того, имя XPS Writer одинаково во всех дистрибутивах Windows (например, английский, немецкий (...))?

Является ли XPS Writer определенно доступным во всех системах Windows начиная с Vista. Также в версии для начинающих, во всех версиях x86 и x64, а также в Windows 8?

Ответы [ 3 ]

1 голос
/ 16 марта 2012

Взгляните на http://msdn.microsoft.com/en-us/library/aa969772.aspx

Я подозреваю, что вы можете использовать приведенный ниже фрагмент кода, чтобы попытаться напечатать XPS, тогда, если он не работает, у вас, вероятно, нет принтера.

            try
            {
                // Print the Xps file while providing XPS validation and progress notifications.
                PrintSystemJobInfo xpsPrintJob = defaultPrintQueue.AddJob(f.Name, nextFile, false);
            }
            catch (PrintJobException e)
            {
                Console.WriteLine("\n\t{0} could not be added to the print queue.", f.Name);
                if (e.InnerException.Message == "File contains corrupted data.")
                {
                    Console.WriteLine("\tIt is not a valid XPS file. Use the isXPS Conformance Tool to debug it.");
                }
                Console.WriteLine("\tContinuing with next XPS file.\n");
            }
1 голос
/ 16 марта 2012

Я не знаю насчет имени, но модель «принтера» также является Microsoft XPS Document Writer, и она останется прежней.

Вы можете просто найти принтер с этой моделью!

0 голосов
/ 15 февраля 2016

Как предложил Питер Витвоет, здесь есть метод, который возвращает, если 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, является более безопасным способом.

...