1

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

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

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

它工作正常,并为我提供了远程服务器上的打印机列表,例如:
Created PrintServer object~@~Sc-4 Pull Port~@~Microsoft XPS Document Writer

当我尝试模拟时,我得到了这个:
System.Printing.PrintServerException:创建 PrintServer 对象时发生异常。Win32 错误:打印机名称无效。
在 System.Printing.PrintServer.Initialize(字符串路径,字符串 [] propertiesFilter,PrinterDefaults 打印机默认值)
在 System.Printing.PrintServer..ctor(字符串路径,PrintSystemDesiredAccess desiredAccess)
在 PrintService.PrintService.ImpersonatedInstalledPrinterList(字符串服务器名,字符串用户名,字符串用户密码,字符串域)

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

谢谢你尽你所能的帮助,

4

1 回答 1

0

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

于 2012-08-14T12:39:02.273 回答