我试图将文档转换为html,这是我使用的代码。 问题是我没有例外,但我没有创建该文件。 我尝试了各种替代方案,但不知道如何继续。
[HttpPost]
public ActionResult Index(HttpPostedFileBase file)
{
//check if file is ok
if (file != null && file.ContentLength > 0)
{
var path = Path.Combine(Server.MapPath("~/App_Data/"),
System.IO.Path.GetFileName(file.FileName));
file.SaveAs(path);
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = ("soffice.exe");
psi.Arguments = string.Format("--headless --convert-to htm:HTML --outdir " + Server.MapPath("~/App_Data/batch/") + " \"{0}\"", path);
psi.UseShellExecute = false;
Process proc = new Process();
proc.StartInfo = psi;
proc.Start();
proc.WaitForExit();
}
return View();
}
我已更新代码:
[HttpPost]
public ActionResult Index(HttpPostedFileBase file)
{
//check if file is ok
if (file != null && file.ContentLength > 0)
{
var path = Path.Combine(Server.MapPath("~/App_Data/"),
System.IO.Path.GetFileName(file.FileName));
file.SaveAs(path);
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = Path.Combine(Server.MapPath("~/App_Data/LOP/App/libreoffice/program/"), "soffice.exe");
psi.Arguments = string.Format("--headless --convert-to htm:HTML --outdir " + Server.MapPath("~/App_Data/batch/") + " \"{0}\"", path);
psi.UseShellExecute = false;
psi.RedirectStandardOutput = true;
Process proc = new Process();
proc.StartInfo = psi;
proc.Start();
string myString = proc.StandardOutput.ReadToEnd();
Console.WriteLine(myString);
proc.WaitForExit();
var exitCode = proc.ExitCode;
}
return View();
}
但是Exitcode仍为0且myString为空:(
- SOLUTION-- 所有代码都可以! libroffice的进程被挂在内存中然后每个其他请求附加而没有给出结果,奇怪的是libreoffice继续将exitcode 0赋予内存中的所有进程
答案 0 :(得分:1)
您可以在流程退出后查询Process实例上的ExitCode
属性,以检查流程是否正确执行,或者您可以从StandardOutput
属性中读取控制台中发生的情况(但是make一定要将ProcessStartInfo.RedirectStandardOutput
设置为true,将ProcessStartInfo.UseShellExecute
设置为false,因为MSDN上建议http://msdn.microsoft.com/en-us/library/vstudio/system.diagnostics.process.standardoutput)。
答案 1 :(得分:0)
通过获取流程的输出,可以更好地理解问题的答案。在你的" psi"变量,设置" RedirectStandardOutput = true"在你打电话之前" proc.Start();"然后访问输出,添加如下所示的行并在其上设置断点(或其后面的行)。
string output = proc.StandardOutput.ReadToEnd();
有关详细信息,请查看下面的现有帖子,查看已接受的答案; - )