【问题标题】:Command line process not working when run from C#从 C# 运行时命令行进程不起作用
【发布时间】:2013-06-14 23:58:57
【问题描述】:

我正在尝试上传文件,然后使用服务器端进程对其进行转换。

这是在 ASP.NET 开发服务器 localhost:8638 上运行的 Visual Studio Web ASP.NET Web 应用程序的一部分

string fn = System.IO.Path.GetFileNameWithoutExtension(File1.PostedFile.FileName);
Process p = new Process();
                    p.StartInfo.WorkingDirectory = Server.MapPath("/Data");
                    p.StartInfo.FileName = "cmd.exe";
                    p.StartInfo.Arguments = "soffice --headless --invisible -convert-to pdf "+fn+".ppt";
                    p.StartInfo.UseShellExecute = false;
                    p.StartInfo.RedirectStandardOutput = true;
                    p.Start();
                    p.WaitForExit();

我可以在Data目录中手动打开cmd.exe,然后输入这个命令,替换文件名,它就可以工作了。但是,运行此代码不会产生任何结果

我错过了什么,或者做错了什么?

【问题讨论】:

  • 运行这段代码时出了什么问题?
  • 它默默地无法将文件转换为 .pdf
  • cmd.exe 不接受这样的论点。你应该自己运行这个过程。
  • 它是否在具有权限的用户帐户下运行?您可以将调试器附加到进程并查看会发生什么。
  • @SLaks 哦。是的,这行得通

标签: c# process path cmd filepath


【解决方案1】:

您不能只将所有内容都传递给 cmd。您需要使用 /C 参数,该参数将使用这些命令打开命令提示符,并在完成运行该命令时终止它。尝试将您的论点更改为

StartInfo.Arguments = "/C soffice --headless --invisible -convert-to pdf "+fn+".ppt";

另一种解决方案是简单地运行进程本身(如 SLaks 在 cmets 中所建议的那样)。将p.StartInfo.FileName 更改为适当的可执行文件,编辑您的参数,您应该一切顺利。这应该是首选方法,因为它可以更直接地执行您想要的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 2015-12-05
    • 2014-09-23
    • 1970-01-01
    相关资源
    最近更新 更多