![如何安装可从 Windows 服务访问的打印机?](https://linux22.com/image/1403996/%E5%A6%82%E4%BD%95%E5%AE%89%E8%A3%85%E5%8F%AF%E4%BB%8E%20Windows%20%E6%9C%8D%E5%8A%A1%E8%AE%BF%E9%97%AE%E7%9A%84%E6%89%93%E5%8D%B0%E6%9C%BA%EF%BC%9F.png)
我的应用程序作为 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 /?
以查看所有选项)