Windows服务和networking打印机的问题

我有一个Windows服务应用程序,现在应该打印一些文件。 据我所知,要打印这些文件,我的服务必须使用本地服务或networking服务以外的用户帐户运行。 所以我已经创build了一个用户帐户,并将其添加到pipe理员组,并使用它运行服务。

使用本地安装的打印机,我没有任何问题,因为这些打印机是为所有帐户自动安装的。 为了能够使用networking打印机进行打印,我创build了另一个应用程序,用于将当前login用户的已安装打印机与我的服务使用的用户帐户与rundll32.exe printui.dll,PrintUIEntry命令同步。

在Vista和Windows7中,对于打印机的同步,我没有任何问题,因为每次安装打印机时,authentication窗口都会打开,并要求相应的用户帐户来安装打印机(服务用户帐户不是在networking打印机计算机上创build),但在XPfind与“连接到{printername}”标题对话框将出现并停止响应,或有时它会安装打印机,但每次服务试图打印时,一个Win32Exception“一个StartDocPrinter调用没有发出“消息将抛出,并在运行同步应用程序的用户帐户重复打印机将被显示,我不能删除这些打印机,除非强制(使用registry)。

我是否正确地使用Windows服务来打印文档? 如果是,我该如何解决上述问题? 如果不是,我该怎么办?

谢谢。

您可以作为服务用户帐户login到计算机,并手动添加/configuration/testingnetworking打印机。

为什么不用一个本地队列来设置所有的打印机,这样他们总是本地打印机,你没有问题?

您可以通过使用打印机的相关IP地址创build本地端口,将本地队列指向networking打印机。 (通过添加打印机向导,添加本地打印机(不要让它search即插即用),创build一个新的端口,使用标准的TCP / IP端口。

我已经通过向服务器请求networking身份validation然后安装打印机来解决此问题。

谢谢你们的帮助。

我想你可能在这里做不必要的工作。 如果您使用所谓的“每台计算机连接”来安装打印机,则该打印机将适用于该计算机上的所有用户和服务。 我知道我们通过这种方式作为服务运行的Tomcat进行打印。 警告:我不是100%确定这适用于本地服务帐户。

听起来像你已经知道PrintUI.dll PrintUI.DLL用户指南和参考

主要部分:
rundll32 printui.dll PrintUIEntry / in / n \ machine \ printer
-要么-
rundll32 printui.dll PrintUIEntry / if / f%windir%\ inf \ ntprint.inf / r“lpt1:”/ m“HP PSC 500”

按照您描述的方式进行操作可能会造成不必要的安全性削弱。 服务应该以完成工作所需的最低权限运行。 当你在一个用户帐户中运行它们时,你可能很容易无意中给你不应该拥有的服务权限。