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

Posted

技术标签:

【中文标题】将来自网络服务器的打印队列列为模拟用户时出错【英文标题】:Error when listing print queues from network server as impersonated user 【发布时间】:2012-08-13 15:19:48 【问题描述】:

我一直在尝试设置一个简单的端点服务,它位于服务器上,接受 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(字符串路径,字符串 [] propertiesFilter,PrinterDefaults 打印机默认值) 在 System.Printing.PrintServer..ctor(字符串路径,PrintSystemDesiredAccess desiredAccess) 在 PrintService.PrintService.ImpersonatedInstalledPrinterList(String serverName, String userName, String userPassword, String domain)

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

感谢您提供的任何帮助,

月饼

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于将来自网络服务器的打印队列列为模拟用户时出错的主要内容,如果未能解决你的问题,请参考以下文章

深信服scsa模拟题加知识点总结

macbookpro打印机尝试添加所选设备时出错?

java socket模拟http请求

为啥电脑输入开机密码后,显示远程桌面服务正忙,开不了机

将网络核心 API 部署到 AWS Elastic Beanstalk 服务器时出错

比较来自不同网络服务器的散列​​密码