C# Web API 找不到重定向的打印机

C# Web API cannot find Redirected Printer

我正在开发 Web API,它部署在 Windows Server 2012 R2 上的 IIS 8 中。它要求将文档从服务器打印到网络打印机。

我正在使用重定向打印机的 RDP 会话进行开发,该打印机也设置为我的默认打印机。

我创建了一个虚拟的概念验证作为控制台应用程序,以帮助用户了解完成这项工作所需的条件。

虚拟控制台使用以下代码查找打印机

var ps = new PrinterSettings();
foreach(var p in PrinterSettings.InstalledPrinters)
{
  var name = p as string;
  Console.WriteLine(name);
}

当 运行作为控制台应用程序时,它会选择默认的重定向打印机并运行。

我已将此代码移至 Web API 并完成了以下操作

执行此操作后,默认打印机不再出现在已安装打印机列表中,并且没有可用的默认打印机。

我还需要做什么 permissions/changes 才能让 IIS 托管站点可以看到重定向的打印机?

IIS 运行 下的帐户需要能够访问您要使用的打印队列。默认情况下,它没有。维护服务器的人需要授予帐户所需的权限。

请注意,这不是来自您的 RDP 会话的 "redirected printer"。需要在 IIS 服务器上配置打印机,并且 IIS 帐户是 运行 需要访问它。

RDP 会话已隔离。

从您的服务器端代码,您可以正常打开打印机并执行任何您想要的操作,因为它只是一台普通打印机。

只是一个想法:你检查过 "Load User profile" 了吗? 参见

Security exceptions in ASP.NET and Load User Profile option in IIS 7.5

https://blogs.msdn.microsoft.com/vijaysk/2009/03/08/iis-7-tip-3-you-can-now-load-the-user-profile-of-the-application-pool-identity/

我不是 IIS 专家,但多年前遇到过一些问题,计划任务未加载用户配置文件。