[英]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
?
有同樣的問題。 問題是進程開始了,但沒有退出,也沒有給出任何結果,任何 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.