网络连接打印机在ASP.Net应用程序中不可用

网络连接打印机在ASP.Net应用程序中不可用,asp.net,iis,printing,impersonation,Asp.net,Iis,Printing,Impersonation,我有一个在IIS 7.5上运行的ASP.Net 4.0 web应用程序,我可以使用System.Drawing.Printing.PrinterSettings.InstalledPrinters命令获取已安装打印机的列表,并将应用程序中的每个报告分配给上面列出的任何打印机 服务器上可能有一些网络连接打印机,所有这些打印机都设置了对应用程序用户帐户的完全权限,在应用程序用户帐户注销windows之前,一切正常,此时System.Drawing.Printing.PrinterSettings.I

我有一个在IIS 7.5上运行的ASP.Net 4.0 web应用程序,我可以使用
System.Drawing.Printing.PrinterSettings.InstalledPrinters
命令获取已安装打印机的列表,并将应用程序中的每个报告分配给上面列出的任何打印机

服务器上可能有一些网络连接打印机,所有这些打印机都设置了对应用程序用户帐户的完全权限,在应用程序用户帐户注销windows之前,一切正常,此时
System.Drawing.Printing.PrinterSettings.InstalledPrinters
仅返回本地打印机,未列出网络连接的打印机

我尝试通过以下方式向具有网络打印机访问权限的用户模拟ASP.Net进程,但没有成功:

  • 我将应用程序池
    流程模型
    配置为作为
    特定用户标识
  • 我向中的特定用户模拟了应用程序的标识 Web.Config:

  • 最后使用
    advapi32.dll
    API在代码中实现模拟

在上述所有方法中,
WindowsIdentity
在打印时返回真实用户名:

System.Security.Principal.WindowsIdentity.GetCurrent().Name
但这里的问题似乎不是模仿,用户注销的那一刻,所有连接网络的打印机都消失了


有人知道如何解决这个问题吗?即使用户未登录,也有办法访问网络连接的打印机吗?

尝试以下链接,可能会有所帮助。您必须按名称在服务器上添加打印机,并使用名称而不是UNC访问打印机


网络连接的打印机、共享文件夹和地图驱动器只有在用户登录操作系统时才可访问,它们几乎不是某些网络资源的快捷方式,所有这些都已断开连接,并且在相应用户注销时无法访问

使用
System.Printing.PrintServer
GetPrintQueues
方法,可以获取打印服务器承载的打印队列集合:

PrintServerUNCName
是相应服务器的名称,如
\\MyServerName

var printers = new PrintServer("PrintServerUNCName").GetPrintQueues()
    .Where(t =>
    {
        try { return t.IsShared && !t.IsNotAvailable; }
        catch { return false; }
    })
    .Select(t => t.FullName)
    .ToArray();

我们有同样的问题。。。你有没有找到解决办法?