我想使用Visual Studio 2010从C#的Windows服务中进行打印。到目前为止,通过使用此处找到的代码,我仅获得了部分成功:

Print html document from Windows Service without print dialog

我目前遇到的问题有两个,只有通过允许服务与桌面交互才能发现:

1)当将URL作为HTML位置输入时,它将请求该位置的凭据(网络共享的IIS Web服务器,我无法以任何方式进行更改,这要求用户名和密码来访问信息)。

2)输入凭据后,无论我对SetDefaultPrinter进行什么操作,默认打印机始终都是XPS打印机(我发现有两种不同的方法可以执行此操作)。我发现这是因为我要打印到的打印机也是网络打印机,本地系统帐户无法访问(显然)。我尚未找到解决此问题的方法。

我想通过以编程方式输入所需的凭据(这是网络共享凭据集)来解决这两个问题,然后打印到网络打印机。在其他桌面应用程序中,即使我没有安装每台网络打印机,我也已成功打印到其中的每台网络打印机。

尝试使用我的凭据而不是本地系统帐户登录不能解决任何一个问题。我正在使用Windows XP。

假设我可以使用该服务,则还需要在另一台服务器上安装该服务,因此,如果有必要预先安装每台打印机,则需要知道要采取什么步骤来确保本地系统帐户可以访问它们。我将安装的服务器可能是Windows Server 2003或2008,但是具有与开发计算机相同的网络访问权限。

编辑:我尝试过一种解决方案,使其作为其他帐户登录,所有这些帐户都应具有凭据(并且,实际上,如果在作为本地系统与桌面交互运行时输入了这些凭据,则这些凭据将被接受)。尝试使用此方法的每个用户都将默认打印机设置为我要测试打印的打印机,但是没有发生打印。我唯一确定确定要尝试使用XPS打印机的时间是当它作为具有桌面交互功能的本地系统登录时。

最佳答案

不要将服务作为本地系统运行。它没有访问网络资源所需的权限。创建一个用户并在该用户下运行服务,如果您在域中,请确保它是域用户而不是本地用户。您将需要以该用户身份登录,然后在要运行服务的计算机上安装要使用的打印机。另外,如果IIS应用程序正在使用Windows身份验证,请查看是否可以向您在其下运行服务的帐户授予访问Web应用程序的权限。

10-07 14:13
查看更多