在ASP.NET中执行命令行实用程序
我需要一些关于使用C#/ ASP.NET Web应用程序中的命令行实用程序的建议。
我找到了第三方实用程序,用于将文件转换为CSV格式。 该实用程序工作正常,可以从命令行使用。
我一直在网上寻找有关如何执行命令行实用程序的示例,并找到了此示例。
问题是这不是很好。 当我尝试使用我的实用程序的示例代码时,我得到一个提示,要求我在客户端计算机上安装该实用程序。 这不是我想要的。 我不希望用户看到后台发生了什么。
是否可以执行命令服务器端并从那里处理文件?
任何帮助将不胜感激。
我过去曾多次做过类似的事情,这对我有用:
创建一个IHttpHandler实现(最简单的做.ashx文件)来处理转换。 在处理程序中,使用System.Diagnostics.Process和ProcessStartInfo来运行命令行实用程序。 您应该能够将标准输出重定向到HTTP响应的输出流。 这是一些代码:
public class ConvertHandler : IHttpHandler { #region IHttpHandler Members bool IHttpHandler.IsReusable { get { return false; } } void IHttpHandler.ProcessRequest(HttpContext context) { var jobID = Guid.NewGuid(); // retrieve the posted csv file var csvFile = context.Request.Files["csv"]; // save the file to disk so the CMD line util can access it var filePath = Path.Combine("csv", String.Format("{0:n}.csv", jobID)); csvFile.SaveAs(filePath); var psi = new ProcessStartInfo("mycsvutil.exe", String.Format("-file {0}", filePath)) { WorkingDirectory = Environment.CurrentDirectory, UseShellExecute = false, RedirectStandardOutput = true, RedirectStandardError = true, CreateNoWindow = true }; using (var process = new Process { StartInfo = psi }) { // delegate for writing the process output to the response output Action
该命令正在运行服务器端。 任何代码都在服务器上运行。 您提供的示例中的代码可以正常工作。 您只需要确保在服务器上正确设置了该实用程序,并且您具有该目录/文件的权限。