2016-09-29 14 views
7

Próbuję drukować na drukarce sieciowej z kodu, ale status drukarki sieciowej w oknie dialogowym drukowania mówi Access denied, unable to connect, a przycisk drukowania jest wyłączony. Ale mogę drukować na tej drukarce po prostu dobrze, jeśli wydrukuję z innej aplikacji. A jeśli wybiorę opcję Drukuj do pliku PDF z okna dialogowego drukowania, to również działa poprawnie. Po prostu nie mogę drukować na drukarce sieciowej. Mam problem z uprawnieniami?Odmowa dostępu do drukarki sieciowej w PrintDialog

if (File.Exists(previewDocument)) 
    File.Delete(previewDocument); 

PrintDialog printD = new PrintDialog(); 
printD.PageRangeSelection = PageRangeSelection.AllPages; 
printD.UserPageRangeEnabled = true; 

if (printD.ShowDialog() ?? false) 
{ 
    XpsDocument xpsDoc = new XpsDocument(previewDocument, FileAccess.ReadWrite); 
    XpsDocumentWriter xpsWriter = XpsDocument.CreateXpsDocumentWriter(xpsDoc); 
    xpsWriter.Write(((IDocumentPaginatorSource)messageFlow).DocumentPaginator); 

    FixedDocumentSequence fixedDocSeq = xpsDoc.GetFixedDocumentSequence(); 
    printD.PrintDocument(fixedDocSeq.DocumentPaginator, "Hello!"); 
} 
+0

Możesz także sprawdzić kontekst, w którym aplikacja próbuje uruchomić. Możesz podszywać się pod kontekst aplikacji, jeśli aplikacja działa pod przywilejem, który nie pozwala na drukowanie. – Nair

+0

Spróbuj uruchomić aplikację jako administrator. – Hozikimaru

+0

Czy otrzymujesz ten błąd z kompilacji programu lub z debugowania? – Hank

Odpowiedz

-1

nie mogę jeszcze komentować, ale chciałem podzielić się moją myśl dotyczącą problemu.

Mam problem z uzyskaniem dostępu do dysków sieciowych z moich aplikacji. Nawet jeśli działasz jako administrator. Myślę, że drukarki są dostępne w podobny sposób.

Mój problem polegał na kontroli konta użytkownika (UAC).

Spróbuj ustawić rejestr zgodnie z tym: Windows 10 and network drive

0

Należy dodać ten fragment kodu po uruchamianiu swój dialog drukowania aby znaleźć wspólną drukarkę sieciową i drukować na nim

printD.PrintQueue = New PrintQueue(New PrintServer(@"\\computer server name"), "the exact name of your network printer") 

Nadzieja pomaga

+0

Nie mogę mieć drukarki statycznej. Każdy użytkownik ma inną drukarkę sieciową. – Arm0geddon

+0

Powinieneś wspomnieć, że nie możesz mieć drukarki statycznej. W jakim scenariuszu każdy użytkownik ma inną drukarkę sieciową. Jeśli tak jest, to potrzebujesz zapytania WMI, aby wyświetlić listę drukarki sieciowej dla zalogowanego użytkownika, a następnie wybrać ją w aplikacji wpf. Postępuj zgodnie z https://blogs.technet.microsoft.com/heyscriptingguy/2007/07/17/how-can-i-list-the-network-printers-for-loged-on-user/ Mam nadzieję, że pomaga –

Powiązane problemy