是否有方法可以确定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上?
看看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是一种更安全的方法。