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

标签 asp.net iis printing impersonation

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

可能有一些 联网打印机 在服务器上全部设置为 完全特权到应用程序的用户帐户,一切正常,直到应用程序的用户帐户注销 Windows,此时 System.Drawing.Printing.PrinterSettings.InstalledPrinters仅返回本地打印机,未列出网络连接打印机!

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

  • 我配置了应用程序池 Process Model作为一个运行
    特定的用户身份。
  • 我将应用程序的身份伪装成特定用户
    网络配置:
    <identity impersonate="true" userName="user" password="pass"/>
  • 最后使用 advapi32.dll 在代码中实现了模拟API

  • 在上述所有方法中,WindowsIdentity打印时返回真实用户名:
    System.Security.Principal.WindowsIdentity.GetCurrent().Name
    

    但看起来模仿不是这里的问题,用户注销的那一刻,所有网络连接的打印机都消失了!

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

    最佳答案

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

    使用 System.Printing.PrintServerGetPrintQueues方法,您可以获取打印服务器托管的打印队列集合:
    PrintServerUNCNameUNC name对应的服务器,如 \\MyServerName

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

    关于asp.net - 网络连接打印机在 ASP.Net 应用程序中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10474066/

    相关文章:

    到本地主机的 Firefox NTLM 凭据

    asp.net - Forms Auth requireSSL 和 Https

    c - 我在程序中找不到任何错误,但它没有给出所需的输出

    c# - 在 C# 中使用 Gembox.Pdf 打印 pdf 时,打印队列中的 documentName 始终为 'XPS Document'

    java - 我试图打印这个而不只是为每一行做 println

    asp.net - session cookie 的生命周期是多长?

    c# - 使用 Identity 将表添加到 Code-First ASP.NET 应用程序

    c# - 如何在不丢失数据的情况下重命名数据表列名?

    asp.net - 如何在 web.config 文件中包含 &/&

    android - IIS Express MVC 远程调试 SSL 连接错误