从非交互式进程(Windows服务,计划任务等)在WinServer 2008中打印PDF

时间:2011-08-29 22:24:57

标签: windows windows-services windows-server-2008 scheduled-tasks session-0-isolation

我正在尝试编写一个打印PDF的非交互式进程,我需要有关如何在Windows Server 2008(和Vista / 7)上构建它的建议。

以前,我们有一个计划任务(设置为运行是否登录用户帐户),可以打印目录中的所有PDF。 (单独的过程会将PDF移动到目录中。)在运行时,这将启动另一个进程(Adobe Reader或Foxit Reader)来打印PDF。 Adobe Reader和Foxit Reader都具有静默打印功能,因此所有内容都将被发送到计划任务运行的用户的默认打印机。没有生成任何用户界面,所有文件都可以毫不费力地打印出来。 这适用于Server 2003。

该过程不再适用于Server 2008。我不完全确定,但我认为这与Session 0 Isolation有关。我无法证明这一点。但是,我可以说当设置为“仅在用户登录时运行”时,该过程将作为计划任务运行。现在,虽然这有效,但它会强制用户登录到计算机,因此无法满足我的要求。 (我的第一个线索在this previous question。)

我无法确定如何才能继续前进。有没有办法满足我的要求?

一些注意事项:

我看到的每个解决方案似乎都在使用登录用户的凭据。请参阅我上面链接的问题 - 列出的解决方案似乎抓住了已登录的令牌用户并使用它来运行程序。 (查看GetCurrentUserToken()过程 - 稍后在API调用CreateProcessAsUser()中使用返回的值。)

我的当前流程尽可能地生成,没有用户界面。我已经使用ProcMon验证了阅读器进程(Adobe或Foxit)似乎正确打印和打印驱动程序本身似乎有问题。这是通过尝试使用打印到文件驱动程序来支持的 - 打印到文件驱动程序以三个可见步骤运行,并且清楚地完成所有文件的第一个而不启动第二个。那么Session 0 Isolation如何影响打印机驱动程序?我不清楚这一点。 (The best documentation I can find on the subject仅提及打印机驱动程序可能会受到影响,即使打印后台处理程序在会话0中运行。)

即使进程“允许服务与桌面交互”已选中,打印为Windows服务也无法正常工作。

添加粗体文字以抵消引起炫目的文字效果。

1 个答案:

答案 0 :(得分:0)

尝试使用福昕阅读器代替Acrobat-Reader。 Foxit Reader在Windows 2008及更高版本中也支持无GUI /命令行执行!

也可以打印,但每次运行printjob时都必须在session0中添加(或检查)打印机。

如果您需要更多帮助,请再次询问。我已经构建了一个PowerShell脚本,该脚本在任务调度程序中运行,在福昕阅读器的帮助下打印pdf文件。