2016-09-29 35 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/ 希望它有幫助 –