2016-09-29 57 views
7

我试图从代码打印到网络打印机,但打印对话框中的网络打印机状态为Access denied, unable to connect,打印按钮被禁用。但是如果从另一个应用程序打印,我可以打印到该打印机。而且,如果我从打印对话框中选择“打印到PDF”,那也可以正常工作。我只是无法打印到网络打印机。我有某种权限问题?在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

您可能会检查您的应用程序尝试运行的上下文。如果您的应用程序在不允许打印的特权下运行,您可能会冒充应用程序上下文。 – Nair

+0

尝试以管理员身份运行您的应用程序。 – Hozikimaru

+0

你是从程序的内部版本还是从调试版本中获得这个错误? – Hank

回答

-1

我还不能评论,但我想分享我对你的问题的想法。

我有问题从我的应用程序访问网络驱动器。 即使以Admin身份运行。我在想打印机是以类似的方式访问的。

我的问题是用户帐户控制(UAC)。

尝试设置寄存器根据此:Windows 10 and network drive

0

你应该实例化打印对话后添加以下代码片段找到你的共享网络打印机,打印到它

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

希望它可以帮助

+0

我无法使用静态打印机。每个用户都有不同的网络打印机。 – Arm0geddon

+0

你应该提到你不能有静态打印机。在哪种情况下,每个用户都有不同的网络打印机。 如果是这种情况,那么你需要wmi查询列出登录用户的网络打印机,然后在你的wpf应用程序中选择它。 按照此 https://blogs.technet.microsoft.com/heyscriptingguy/2007/07/17/how-can-i-list-the-network-printers-for-the-logged-on-user/ 希望它有帮助 –