我一直在尝试设置一个位于服务器上的简单端点服务,接受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)
我一直无法弄清楚,或在网上找到,为什么它会抛出上述错误。我使用的是有效的域帐户,甚至还给了我用来测试服务器上打印队列的完全权限的用户。当我尝试以模拟用户身份进行打印时出现相同的错误,在我没有进行模拟时发送打印作业没有问题。
感谢您提供的任何帮助,
月之
答案 0 :(得分:0)
我发现我使用的代码存在问题,问题是当我使用模拟时我正在使用,当我需要使用委托时,我使用了模拟的SECURITY_IMPERSONATION_LEVEL。一旦我改变了,错误消失了。