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