RDP Shared Printer 工作正常,但当 IIS 应用程序尝试打印到它时却不行

RDP Shared Printer works fine, but not when the IIS application tries to print to it

我通过 RDP 将 Windows 测试页打印到打印机没有问题,但是 IIS 中的应用程序 运行 无法打印到共享的 RDP 打印机。在相应地设置 PrinterSetting 后,它在 RDP 之外工作,它将打印机视为无效和脱机。

我看到了一些关于为用户 运行 IIS 应用程序设置打印机权限的建议,但是对于通过 RDP 共享的重定向打印机,所有安全设置都通过 RDP 禁用。

以下两种情况都通过 RDP 向共享打印机返回错误。无论如何我都尝试过打印,正如预期的那样,我遇到了一个异常,因为它无法访问打印机。

if (!printDocument.PrinterSettings.IsValid || !IsPrinterOnline())
private bool IsPrinterOnline()
{
    bool printerIsOnline = false;
    string printerName = _printerName;
    string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE '{0}'", printerName);
    ManagementObjectSearcher searcherPrinters = new ManagementObjectSearcher(query);
    foreach (ManagementObject printer in searcherPrinters.Get())
    {
        printerIsOnline = !printer["WorkOffline"].ToString().Equals("True");
    }

    return printerIsOnline;
}

当您通过 RDP 连接到一台机器并随身携带打印机时,这允许应用程序 运行ning 在您的配置文件 上访问您的远程连接打印机。

但是,IIS 应用程序 运行 在不同的用户上下文中,因此它们将无法访问您的用户会话中可用的任何打印机。通常他们只能访问系统范围内可用的打印机。即使 IIS 配置为 运行 应用程序池和站点作为远程连接的同一用户,我也不认为 IIS 能够打印到打印机,因为它是用户配置文件的不同实例。

最好的方法是直接通过 UNC 连接到远程打印机,而不是尝试通过 RDP 连接进行打印。