2012-05-06 1 views
5

IIS 7.5에서 실행되는 ASP.Net 4.0 웹 응용 프로그램이 있습니다. System.Drawing.Printing.PrinterSettings.InstalledPrinters 명령을 사용하여 설치된 프린터 목록을 얻고 위에 나열된 프린터에 응용 프로그램의 각 보고서를 할당 할 수 있습니다 !네트워크 연결 프린터를 ASP.Net 응용 프로그램에서 사용할 수 없음

일부 네트워크에 연결된 프린터의 모든 응용 프로그램의 사용자 계정에 전체 권한을 설정 서버가있을 수 있습니다, 모든이 시점에서, System.Drawing.Printing.PrinterSettings.InstalledPrinters 만 반환 로컬 프린터를 창문 오프 응용 프로그램의 사용자 계정에 로그온 할 때까지 완벽하게 작동 , 네트워크 연결된 프린터가 나열되지 않습니다!

나는 다음과 같은 방법으로 네트워크 프린터에 대한 액세스 권한이있는 사용자에게 ASP.Net 프로세스를 가장 할 시도하지, 아직 성공했습니다

: 나는 특정 사용자로 실행되도록 응용 프로그램 풀 Process Model을 구성

  • 정체.
  • 나는 의 Web.config에서 특정 사용자에게 응용 프로그램의 ID를 가장 한 :

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

  • 그리고 마지막으로 위의 모든 방법으로 advapi32.dll API

를 사용하여 코드에서 가장을 구현 WindowsIdentity은 인쇄 할 때 실제 사용자 이름을 반환합니다.

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

하지만 여기서는 가장이 문제가 아니라 사용자가 로그 오프 한 순간 모든 네트워크 연결 프린터가 사라진 것처럼 보입니다.

아무도이 문제를 해결하는 방법을 알고 있습니까? 사용자가 로그인하지 않아도 네트워크 연결된 프린터에 액세스 할 수 있습니까?

+0

에로

PrintServerUNCName는 해당 서버의 UNC name입니다 : System.Printing.PrintServerGetPrintQueues 방법을 사용하여

, 당신은 인쇄 서버 호스트 인쇄 대기열의 컬렉션을 얻을 수 있습니다 같은 문제가 있습니다 ... 당신은 이것을위한 해결책을 찾았습니까? – JDT

답변

3

네트워크 연결 프린터, 공유 폴더 및지도 드라이브에만 액세스 할 수 있습니다! 우리는있어 \\MyServerName

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

다음 링크를 클릭하면 도움이 될 수 있습니다. 서버에 이름으로 프린터를 추가하고 이름 대신 UNC를 사용하여 프린터에 액세스해야합니다. 사용자가 로그인이 OS로, 그들은 거의 일부 네트워크 리소스에 바로 가기, 모두 분리하고 해당 사용자가 로그 오프 할 때 액세스 할 수없는 경우

Printing from ASP.NET to a network printer