2012-05-06 14 views
5

IIS 7.5 üzerinde çalışan bir ASP.Net 4.0 web uygulamasına sahibim, System.Drawing.Printing.PrinterSettings.InstalledPrinters komutunu kullanarak yüklü yazıcıların listesini alabilir ve her raporu yukarıda listelenen herhangi bir yazıcıya atayabilirim !Ağ Bağlantılı Yazıcı ASP.Net Uygulamasında mevcut değil

bazı Ağ Bağlı Yazıcı tüm uygulamanın kullanıcı hesabına tam ayrıcalık seti sunucuda da olabilir, her şey bu noktada, System.Drawing.Printing.PrinterSettings.InstalledPrinters döner yalnızca yerel yazıcılar pencerelerin kapalı uygulamanın kullanıcı hesap günlükleri kadar mükemmel çalışır Ağ Bağlantılı Yazıcılar listelenmiyor!

Ben şu şekillerde Ağ Yazıcılar erişimi olan kullanıcıya ASP.Net sürecini taklit etmeye çalıştı, ama hiçbir başarı ettik

: Bir belirli bir kullanıcı olarak çalışacak şekilde uygulama havuzunun Process Model yapılandırılmış

  • Kimlik.
  • ben Web.config belirli bir kullanıcıya Uygulamanın kimliğini taklit:

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

  • Ve nihayet yukarıdaki yöntemlerin tümünde advapi32.dll API

kullanarak kodunda bürünme uygulanan WindowsIdentity, yazdırma sırasında gerçek kullanıcı adını döndürür:

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

Ancak, bu kimliğe bürünme işleminin burada değil, kullanıcının oturumu kapattığı anda görünüyor, tüm Ağ Bağlantılı Yazıcılar gitti!

Bunu nasıl çözeceğini bilen var mı? Kullanıcı giriş yapmasa bile Ağ Bağlantılı Yazıcılara erişmenin herhangi bir yolu var mı?

+0

gibi

PrintServerUNCName karşılık gelen sunucu UNC name olduğunu: System.Printing.PrintServer ve GetPrintQueues yöntemi kullanarak

, yazdırma sunucusu barındıran yazdırma kuyrukları koleksiyon alabilirsiniz Aynı konuya sahip olmak ... Bunun için bir çözüm buldunuz mu? – JDT

cevap

3

Ağ Bağlantılı Yazıcılar, Paylaşılan Klasörler ve Harita Sürücüler sadece erişilebilir! Bizler \\MyServerName

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

Yardım için aşağıdaki bağlantıları deneyin. Sunucunuza isminizle yazıcı eklemeniz ve UNC yerine ismi kullanarak yazıcınıza erişmeniz gerekir. kullanıcı günlükleri işletim sistemi içine, onlar ancak bazı ağ kaynaklarına bir kısayol tüm kopar ve ilgili kullanıcı oturumu kapattığında erişilemez olduğunda

Printing from ASP.NET to a network printer