簡體   English   中英

使用 LibreOffice(soffice.exe) 作為 Process.Start() 從代碼隱藏在 IIS 服務器上不起作用

[英]Using LibreOffice(soffice.exe) as Process.Start() from Code behind not working on IIS server

我使用 LibreOffice 作為將 docx 轉換為 pdf 的命令行。 我正在使用下面的代碼片段。

    using (Process pdfprocess = new Process())
          {
            pdfprocess.StartInfo.UseShellExecute = true;
            pdfprocess.StartInfo.LoadUserProfile = true;
            pdfprocess.StartInfo.FileName = "soffice.exe";
            pdfprocess.StartInfo.Arguments = "-norestore -nofirststartwizard -headless -convert-to pdf C:\\test.docx";
            pdfprocess.StartInfo.WorkingDirectory = @"C:\Program Files\LibreOffice\program\";
            pdfprocess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            pdfprocess.Start();
            if (!pdfprocess.WaitForExit(1000 * 60 * 1)) {
                pdfprocess.Kill();
            }
            pdfprocess.Close();
        }

在 IISExpress 或控制台應用程序下一切正常。 當我嘗試在 IIS 服務器下運行時,它不起作用。

我在DefaultAppPool下運行,並且已授予DefaultAppPool訪問 LibreOffice 目錄的權限,但我無法獲得結果。

LocalSystem安全考慮,我不想將 Identity 更改為LocalSystem

如何在默認ApplicationPoolIndentity下使用 Process.Start() 運行soffice.exe

我遇到了同樣的問題,我剛剛找到了對我有用的解決方案。 當我在 CMD 控制台下執行轉換時,一切正常。 但是在 iis 應用程序下執行的 soffice.exe 不起作用。

盡管應用程序池有自己的用戶配置文件目錄,但看起來 libreoffice 無法在那里創建文件。 我所做的是在 iis www 目錄下創建了臨時文件夾,並賦予它 apppool 權限。 然后我用其他參數傳遞了這個位置:“-env:UserInstallation=file:///C:/www/temp/libreoffice”

有同樣的問題。 問題是進程開始了,但沒有退出,也沒有給出任何結果,任何 StandardError 輸出。 肯定是權限問題。 所以我啟動了 procmon 並且它告訴我,它需要訪問這個路徑:

C:\Windows\SysWOW64\config\systemprofile\AppData\Roaming\LibreOffice

這里看起來有類似的問題: Why do systemprofile need Desktop folder to open excel file

所以從安全的角度不確定接下來要做什么,但解決方案是為 ApplicationPoolUser 提供對該文件夾的訪問權限。

更新:
看起來它不適用於所有文檔,即使在我從 Procmon 中消除了其他 docx 文件的所有 ACCESS DENIED 問題后,“soffice”仍然卡住,並且我無法從任務管理器中終止進程,它給出了“拒絕訪問”對話框。 看起來它取決於某些字體,它打開了一些東西,並且因為它持有它,所以無法關閉進程,並且沒有更多的文件繼續進行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM