這是我的代碼,用於在網站上打印已生成的PDF。該頁面允許用戶通過從列表中選擇打印機來打印該PDF文件。在生產Web服務器上執行過程
我的代碼工作正常,當我從本地機器運行它並從選定的打印機打印出PDF時,但是當我將其部署到生產Web服務器(IIS 7)時,單擊「打印」按鈕時不會發生任何異常或者提出錯誤。
我已經檢查過該文件存在於服務器以及可執行文件C:\\Program Files\\Adobe\\Reader 10.0\\Reader\\AcroRd32.exe
,所以我認爲這個問題可能與權限有關。在服務器中執行
檢查:
All Users
,System
和IIS_IUSRS
用戶對~/Content/Pdfs/
夾R/W/E權限All Users
,System
和IIS_IUSRS
用戶對C:\Program Files\Adobe\Reader 10.0\Reader
夾R/W/E權限。IIS上我的應用程序池的標識已從
ApplicationPoolIdentity
更改爲LocalSystem
。private void Print(string file, string printerName) { string FilePath = Server.MapPath("~/Content/Pdfs/" + file); try { Process p = new Process(); p.StartInfo.FileName = @"C:/Program Files/Adobe/Reader 10.0/Reader/AcroRd32.exe"; p.StartInfo.Arguments = "/h /t \"" + FilePath + "\" \"" + printerName + "\""; p.StartInfo.RedirectStandardError = true; p.StartInfo.UseShellExecute = false; p.Start(); string stdout = p.StandardError.ReadToEnd(); p.WaitForExit(); const string fic = @"C:\Output.txt"; System.IO.StreamWriter sw = new System.IO.StreamWriter(fic); sw.WriteLine(stdout); sw.Close(); } catch (Exception e) { const string fic = @"C:\Error.txt"; System.IO.StreamWriter sw = new System.IO.StreamWriter(fic); sw.WriteLine(e.Message); sw.Close(); } }
可能是什麼問題呢?
UPDATE:
我已經做了更多的日誌記錄的建議,所以我用Try...Catch
記錄輸出和異常(更新後的代碼)。一旦在服務器上執行網絡Output.txt
文件被創建爲空並且Error.txt
文件未被創建。 在事件查看器中沒有記錄應用程序錯誤/警告。
我在服務器上打開了命令提示符窗口,並執行AcroRd32.exe /h /t "C:\inetpub\wwwroot\otweb\Content\Pdfs\orden20140627112547.pdf" "Bullzip Printer"
該文件已成功打印出來。
上設置了應用程序池標識到管理員帳戶,如您所說的,此代碼在您的本地計算機上工作正常,但不適用於您的生產服務器。嘗試從服務器調用此代碼或從服務器打開您的網站並執行代碼。可能會起作用。 –
這就是我正在做的。該網站部署在服務器上。我從客戶端和服務器本身訪問網站,當點擊網站內的打印按鈕時,代碼被調用。 – equisde
如果從服務器單擊打印按鈕,代碼是否工作? –