将网络服务器中的打印队列列为模拟用户时出错

时间:2012-08-13 15:19:48

标签: service printing impersonation

我一直在尝试设置一个位于服务器上的简单端点服务,接受Web请求,然后将作业作为用户打印到特定服务器上的特定打印队列,其凭据将传递到服务中。这是为了自动化测试,因此我们使用的用户具有有限的权限,因此安全性不是问题。

当我在没有模仿的情况下尝试此代码时:

PrintServer ps = new PrintServer(@"\\" + serverName, PrintSystemDesiredAccess.EnumerateServer);
            response = "Created PrintServer object";
            foreach (PrintQueue pq in ps.GetPrintQueues())
            {
                response = response + "~@~" + pq.Name;
            }

它工作正常并给我一个远程服务器上的打印机列表,例如:
创建PrintServer对象〜@ ~Sc-4拉端口〜@ ~Microsoft XPS文档编写器

当我尝试冒充时,我得到了这个:
    System.Printing.PrintServerException:创建PrintServer对象时发生异常。 Win32错误:打印机名称无效 在System.Printing.PrintServer.Initialize(String path,String [] propertiesFilter,PrinterDefaults printerDefaults)
   在System.Printing.PrintServer..ctor(String path,PrintSystemDesiredAccess desiredAccess)
   at PrintService.PrintService.ImpersonatedInstalledPrinterList(String serverName,String userName,String userPassword,String domain)

我一直无法弄清楚,或在网上找到,为什么它会抛出上述错误。我使用的是有效的域帐户,甚至还给了我用来测试服务器上打印队列的完全权限的用户。当我尝试以模拟用户身份进行打印时出现相同的错误,在我没有进行模拟时发送打印作业没有问题。

感谢您提供的任何帮助,

月之

1 个答案:

答案 0 :(得分:0)

我发现我使用的代码存在问题,问题是当我使用模拟时我正在使用,当我需要使用委托时,我使用了模拟的SECURITY_IMPERSONATION_LEVEL。一旦我改变了,错误消失了。