2012-05-06 26 views
5

Tôi có một ASP.Net ứng 4,0 web chạy trên IIS 7.5, tôi có thể lấy danh sách các máy in được cài đặt sử dụng System.Drawing.Printing.PrinterSettings.InstalledPrinters lệnh và gán mỗi báo cáo trong ứng dụng với bất kỳ máy in được liệt kê ở trên !Mạng Kết nối máy in không có sẵn trong ASP.Net Application

Có thể có một số Mạng Máy in kết nối trên máy chủ tất cả các thiết lập với đầy đủ đặc quyền tài khoản người dùng của ứng dụng, mọi thứ hoạt động hoàn hảo cho đến khi các bản ghi tài khoản người dùng của ứng dụng ra khỏi cửa sổ, vào thời điểm này System.Drawing.Printing.PrinterSettings.InstalledPrinters lợi nhuận chỉ máy in cục bộ , không có Máy in kết nối mạng nào được liệt kê!

tôi đã cố gắng để mạo danh quá trình ASP.Net cho người dùng với quyền truy cập vào máy in mạng trong những cách sau đây, nhưng không thành công:

  • Tôi đã cấu hình ứng dụng hồ bơi Process Model để chạy như một người dùng cụ danh tính.
  • tôi mạo nhận danh tính của ứng dụng để người dùng cụ thể trong Web.Config:

    <identity impersonate="true" userName="user" password="pass"/>

  • Và cuối cùng thực hiện mạo danh trong mã sử dụng advapi32.dll API

Trong tất cả các phương pháp trên , WindowsIdentity trả lại tên người dùng thực sự khi in:

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

Nhưng có vẻ như mạo danh đó không phải là vấn đề ở đây, lúc này người dùng đăng nhập tắt, tất cả máy in mạng kết nối đã mất hết!

Có ai biết cách giải quyết vấn đề này không? Có cách nào để truy cập Máy in kết nối mạng ngay cả khi người dùng không đăng nhập?

+0

Chúng tôi có cùng một vấn đề ... Bạn đã bao giờ tìm thấy một giải pháp cho điều này? – JDT

Trả lời

3

Mạng kết nối máy in, Shared Folders và ổ đĩa Bản đồ chỉ truy cập khi người dùng đăng nhập vào hệ điều hành, họ hiếm khi một phím tắt để một số tài nguyên mạng, tất cả các ngắt kết nối và không thể tiếp cận khi người dùng tương ứng log off!

Sử dụng System.Printing.PrintServerGetPrintQueues phương pháp, bạn có thể nhận được bộ sưu tập của hàng đợi in rằng các host máy chủ in:

PrintServerUNCNameUNC name của máy chủ tương ứng, như trong \\MyServerName

var printers = new PrintServer("PrintServerUNCName").GetPrintQueues() 
    .Where(t => 
    { 
     try { return t.IsShared && !t.IsNotAvailable; } 
     catch { return false; } 
    }) 
    .Select(t => t.FullName) 
    .ToArray(); 
Các vấn đề liên quan