从ActionResult运行Exe

时间:2014-05-14 13:30:58

标签: c# html asp.net-mvc doc libreoffice

我试图将文档转换为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赋予内存中的所有进程

2 个答案:

答案 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();

有关详细信息,请查看下面的现有帖子,查看已接受的答案; - )

Capturing the console output