2012-05-06 174 views
5

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

可能有一些网络连接的打印机都设置有完全权限应用程序的用户帐户的服务器上,一切都运行完美,直到应用程序的用户帐户注销窗口,在这一点上System.Drawing.Printing.PrinterSettings.InstalledPrinters只返回本地打印机,没有列出网络连接打印机!

我试图在ASP.Net过程模拟用户能够访问网络打印机在以下几个方面,但没有成功:

  • 我配置的应用程序池Process Model作为一个 特定用户身份运行身份。
  • 我模拟的应用程序的身份给特定用户 Web.Config中:

    ​​

  • ,最后用advapi32.dll API

在上述所有的方法来实现的代码模拟,WindowsIdentity在打印时返回真实用户名:

System.Security.Principal.WindowsIdentity.GetCurrent().Name 

但它看起来像那假冒不是这里的问题,当下用户注销时,所有网络连接的打印机都不见了!

有没有人知道如何解决这个问题?即使用户未登录,是否有任何方式可以访问网络连接的打印机?

+0

我们有同样的问题...你有没有找到这个解决方案? – JDT

回答

3

网络连接的打印机,共享文件夹和映射驱动器是唯一能够在用户登录到操作系统,他们几乎没有一个快捷方式到一些网络资源,全部切断,并且当相应的用户注销无法访问!

使用System.Printing.PrintServerGetPrintQueues方法,你可以得到打印队列的集合打印服务器主机:

PrintServerUNCName是对应服务器的UNC name,如\\MyServerName

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