2014-06-26 23 views
2

這是我的代碼,用於在網站上打印已生成的PDF。該頁面允許用戶通過從列表中選擇打印機來打印該PDF文件。在生產Web服務器上執行過程

我的代碼工作正常,當我從本地機器運行它並從選定的打印機打印出PDF時,但是當我將其部署到生產Web服務器(IIS 7)時,單擊「打印」按鈕時不會發生任何異常或者提出錯誤。

我已經檢查過該文件存在於服務器以及可執行文件C:\\Program Files\\Adobe\\Reader 10.0\\Reader\\AcroRd32.exe,所以我認爲這個問題可能與權限有關。在服務器中執行

檢查:

  1. All UsersSystemIIS_IUSRS用戶對~/Content/Pdfs/夾R/W/E權限
  2. All UsersSystemIIS_IUSRS用戶對C:\Program Files\Adobe\Reader 10.0\Reader夾R/W/E權限。
  3. 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"該文件已成功打印出來。

+0

上設置了應用程序池標識到管理員帳戶,如您所說的,此代碼在您的本地計算機上工作正常,但不適用於您的生產服務器。嘗試從服務器調用此代碼或從服務器打開您的網站並執行代碼。可能會起作用。 –

+0

這就是我正在做的。該網站部署在服務器上。我從客戶端和服務器本身訪問網站,當點擊網站內的打印按鈕時,代碼被調用。 – equisde

+0

如果從服務器單擊打印按鈕,代碼是否工作? –

回答

1

我終於找到了解決方案。唯一幫助我的是在IIS

+0

如果這是一個面向公衆的web服務器,這是一個非常非常糟糕的主意。 – Kev

+0

@Kev。它將是一個私人服務器。無論如何,這是我能找到的唯一解決方案。您有什麼建議嗎? – equisde

+0

@Kev我一直在閱讀[** your answer **](http:// stackoverflow.com/questions/5437723/iis-apppoolidentity-and-file-system-write-access-permissions/5439658#5439658)關於IIS AppPoolIdentity和文件系統權限以及[** your answer **](http:// stackoverflow.com/questions/5729264/what-are-all-the-user-accounts-for-iis-asp-net-and-how-do-they-differ/5731360#5731360)關於accoun TS。我遵循[**文檔**](http://www.iis.net/learn/manage/configuring-security/application-pool-identities),但在設置ApplicationPoolIdentity時不起作用。可能是什麼原因? – equisde

相關問題