我使用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

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

最佳答案

我遇到了同样的问题,我只是对我有用的found解决方案。当我在CMD控制台上执行转换时,一切工作正常。但是在iis应用程序下执行的soffice.exe无法正常工作。

尽管应用程序池具有其自己的用户配置文件目录,但看起来libreoffice无法在此处创建其文件。我所做的是在iis www目录下创建了temp文件夹,并为其分配了apppool权限。然后,我使用其他参数传递了该位置,例如:“ -env:UserInstallation = file:/// C:/ www / temp / libreoffice”

关于c# - 使用LibreOffice(soffice.exe)作为无法在IIS服务器上运行的代码的Process.Start(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51901973/

10-11 09:08