我想使用Visual Studio 2010从C#中的Windows服务进行打印。到目前为止,我只是通过使用此处的代码获得了部分成功:
Print html document from Windows Service without print dialog
我遇到的当前问题有两个,我只是通过允许服务与桌面交互来发现:
1)当输入URL作为HTML位置时,它将请求该位置的凭据(我无法以任何方式更改的网络共享IIS Web服务器,它请求用户名和密码访问信息)。
2)输入凭据后,默认打印机始终是XPS打印机,无论我对SetDefaultPrinter做什么(我发现这样做的两种不同方式)。我发现这是因为我要打印的打印机也是网络打印机,本地系统帐户无法访问(显然)。我还没有找到解决这个问题的方法。
我想通过以编程方式输入所需的凭据(这是网络共享凭据集)来解决这两个问题,然后打印到网络打印机。在其他桌面应用程序中,我已成功打印到每台网络打印机,即使我没有安装每台打印机。
尝试使用我的凭据而不是本地系统帐户登录无法解决任何问题。我使用的是Windows XP。
假设我让它工作,我还需要在另一台服务器上安装该服务,因此如果需要预安装每台打印机,我需要知道应该采取哪些步骤来确保本地系统帐户可以访问它们。我将安装的服务器可能是Windows Server 2003或2008,但与开发机器具有相同的网络访问权限。
编辑:我尝试了一个解决方案,让它以其他帐户登录,所有帐户都应该有凭据(事实上,如果这些凭据在作为具有桌面交互的本地系统运行时输入,则接受这些凭据)。尝试使用此功能的每个用户都将默认打印机设置为我尝试测试打印到的打印机,但不会进行打印。我唯一知道它正在尝试使用XPS打印机的时候就是以本地系统登录桌面交互。
答案 0 :(得分:1)
不要将服务作为本地系统运行。它没有访问网络资源所需的权限。创建用户并在其下运行服务,如果您在域中,请确保它是域用户而不是本地用户。您需要以该用户身份登录并在运行服务的计算机上安装要使用的打印机。此外,如果IIS应用程序正在使用Windows身份验证,请查看您运行该服务的帐户是否可以被授予访问该Web应用程序的权限。
答案 1 :(得分:0)
我有这个问题,这个技巧解决了它
转到服务--->双击所需的服务--->继续登录标签
提供安装了打印机的登录凭据。
见下面的屏幕截图。