2012-05-06 20 views
5

Mam aplikację sieci Web ASP.Net 4.0 działającą w IIS 7.5, mogę uzyskać listę zainstalowanych drukarek za pomocą komendy System.Drawing.Printing.PrinterSettings.InstalledPrinters i przypisać każdy raport w aplikacji do dowolnej drukarki wymienionej powyżej !Drukarka podłączona do sieci niedostępna w aplikacji ASP.Net

Mogą istnieć pewne sieci podłączonej drukarki na serwerze cały zestaw z pełnego przywileju do konta użytkownika aplikacji, wszystko działa idealnie, dopóki dzienników konta użytkownika aplikacji poza oknami, w tym momencie System.Drawing.Printing.PrinterSettings.InstalledPrinters zwraca tylko drukarki lokalne , brak podłączonych drukarek sieciowych!

Próbowałem naśladować proces ASP.Net użytkownikowi dostęp do drukarek sieciowych w następujący sposób, ale bez powodzenia:

  • skonfigurowałem pulę aplikacji Process Model uruchomić jako konkretnego użytkownika tożsamość.
  • I wcieliła tożsamość aplikację do konkretnego użytkownika w web.config:

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

  • I wreszcie zaimplementowane w kodzie za pomocą personifikacji advapi32.dll API

We wszystkich powyższych metod , WindowsIdentity zwraca prawdziwą nazwę użytkownika podczas drukowania:

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

Wygląda jednak na to, że podszywanie się nie jest tutaj problemem, w momencie, gdy użytkownik się wyloguje, wszystkie sieciowe drukarki sieciowe zniknęły!

Czy ktoś wie, jak rozwiązać ten problem? Czy istnieje sposób uzyskania dostępu do Network Connected Printers, nawet jeśli użytkownik nie jest zalogowany?

+0

Jesteśmy mając ten sam problem ... Czy kiedykolwiek znalazłeś rozwiązanie tego problemu? – JDT

Odpowiedz

3

sieci podłączonej drukarki, foldery udostępnione i mapować dyski są dostępne tylko, gdy użytkownik loguje się do systemu operacyjnego, są ledwo skrót do niektórych zasobów sieciowych, wszystkie odłączone i są niedostępne, gdy dany użytkownik się wylogowuje!

Korzystanie System.Printing.PrintServer oraz metodę GetPrintQueues można uzyskać zbiór kolejek drukowania że gospodarze serwer druku:

PrintServerUNCName jest UNC name odpowiedniego serwera, jak w \\MyServerName

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