是否有方法可以确定Microsoft XPS Document Writer在系统上是否可用并正常工作

本文关键字:是否 常工作 工作 有方法 Microsoft Writer Document XPS 系统 | 更新日期: 2023-09-27 18:28:05

是否有可靠的方法可以通过.Net确定Microsoft XPS Document Writer是否可用并在系统上运行?

此外,XPS Writer的名称在所有Windows发行版上是否相同(例如英语、德语(…))?

XPS Writer在Vista之后的所有Windows系统上都可以使用吗。同样在Starter版本、所有x86和x64版本以及Windows 8上?

是否有方法可以确定Microsoft XPS Document Writer在系统上是否可用并正常工作

看看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");
            }

我不知道这个名字,但"打印机"的型号也是Microsoft XPS Document Writer,这将保持不变。

你可以去找那个型号的打印机!

正如Pieter 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是一种更安全的方法。