我有一个在 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.PrintServer
和 GetPrintQueues
方法,您可以获取打印服务器托管的打印队列集合: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();
关于asp.net - 网络连接打印机在 ASP.Net 应用程序中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10474066/