我有一个Windows服务,使用xdocument.PrintOut()
函数打印InfoPath表单的默认视图。除一种情况外,它适用于多种机器配置。它在运行Windows 2012(和Win2012R2)(x64),SharePoint 2013(x64)和Office professional plus 2013(x86)的某些计算机上不起作用。我不确定SharePoint是否与此问题有关。
当我检查过程监控日志的差异时,会发生以下情况。
当作为Windows服务执行并且xdocument.PrintOut()
被调用时,它会在后台启动INFOPATH.EXE
,发送打印命令,启动spoolsv.exe(打印机后台处理程序),打印机假脱机程序检测到默认打印机而没有任何内容事后发生。
当使用控制台应用程序执行相同的代码时,会发生similer事件集,此外它会在" C:\Windows\System32\spool\PRINTERS\FP00003.SPL
"创建假脱机程序文件。和" C:\Windows\System32\spool\PRINTERS\FP00003.SHD
"。 SPL文件是实际的假脱机(打印作业)文件。 SHD文件提供有关打印作业发送到哪个打印机以及打印作业来自哪个打印机的信息。
请注意,该服务在运行控制台应用程序的同一帐户下运行,并且所有系统上的打印机驱动程序始终相同。此外,运行完全相同的代码,但通过自动化MS-Word从服务打印到同一台打印机,也可以正常工作。
我试图解释这个问题,请随时通过评论来澄清。
以下是Windows服务和控制台应用程序中使用的代码:
//** Create inforpath application instance
Microsoft.Office.Interop.InfoPath.Application app = new Microsoft.Office.Interop.InfoPath.Application();
//** Open XML file
XDocument xdoc = app.XDocuments.Open(@"F:\InfoPathTestFiles\8f2de6cb86594203b5ecb301cb2f4a94.xml", 1);
//** give enough time for infopath.exe to open the XML file
System.Threading.Thread.Sleep(5000);
//** Send print command.
xdoc.PrintOut();
//** let it cool for 5 seconds.
System.Threading.Thread.Sleep(5000);
//** quit the application.
app.Quit(true);
请注意,InfoPath文件(xml)需要完全受信任才能以这种方式打印。