如何安装可从 Windows 服务访问的打印机?

如何安装可从 Windows 服务访问的打印机?

我的应用程序作为 Windows 服务启动,无法看到我的 PC 上安装的打印机。
但如果此应用程序作为常规 Windows 应用程序启动,则可以看到此打印机。
我该如何安装此打印机(应可通过 Windows 服务访问)?

我需要从 Windows 服务将 PDF 文件发送到此打印机。但 Windows 服务看不到我的打印机。Windows
服务使用 Win API 函数枚举打印机获取打印机列表。
此外,Win API 函数获取默认打印机如果从 Windows 服务调用此函数,则不会返回默认打印机。

操作系统 - Windows 7。
打印机 - HP LaserJet P2055。
它作为网络打印机安装在远程计算机上。
我按照以下步骤将它安装在我的电脑上:
1. 打开设备和打印机。2
. 添加打印机。3
. 添加网络打印机。4
. 根据位置或功能在目录中查找打印机。

答案1

您可能在与交互运行(作为“普通应用程序”)不同的用户上下文中运行该服务。尝试在安装了打印机的用户上下文中运行它:

专为打印而设计的 Windows 服务可以使用 Win32 GDI API 将文档打印到打印机。但是,从 Windows 服务打印时需要考虑一些事项。如果所有打印作业都可以使用一个用户的凭据发送,则该服务可以在该用户的帐户下运行,并且可以访问该计算机上该用户已知的打印机。如果服务必须使用运行时定义的一个或多个用户的凭据进行打印,则服务必须在打印之前调用 LogonUser()、LoadUserProfile() 和 ImpersonateLoggedOnUser()。

(引自:http://blogs.msdn.com/b/dsui_team/archive/2013/06/24/printing-from-a-windows-service.aspx

您可能还想使用以下方法在计算机范围内(针对所有用户)安装打印机打印用户界面例如:
Add per machine printer connection: rundll32 printui.dll PrintUIEntry /ga /n\\client2\printer2

(运行rundll32 printui.dll,PrintUIEntry /?以查看所有选项)

相关内容