当前位置: 首页 > 编程语言 > C#

在ASP.NET中执行命令行实用程序分享

时间:2023-04-10 16:33:49 C#

C#学习教程:在ASP.NET中执行命令行实用程序我找到了将文件转换为CSV格式的第三方实用程序。该实用程序工作正常,可以从命令行使用。我一直在网上寻找有关如何执行命令行实用程序的示例,并找到了这个。问题是它不是很好。当我尝试为我的实用程序使用示例代码时,我收到一条提示,要求我在客户端计算机上安装该实用程序。这不是我想要的。我不希望用户看到后台发生了什么。是否可以在服务器端执行命令并从那里处理文件?任何帮助将不胜感激。我过去做过很多次类似的事情,这对我有用:创建一个IHttpHandler实现(最容易做的.ashx文件)来处理转换。在处理程序中,使用System.Diagnostics.Process和ProcessStartInfo运行命令行实用程序。您应该能够将标准输出重定向到HTTP响应的输出流。这是一些代码:publicclassConvertHandler:IHttpHandler{#regionIHttpHandlerMembersboolIHttpHandler.IsReusable{get{returnfalse;}}voidIHttpHandler.ProcessRequest(HttpContextcontext){varjobID=Guid.NewGuid();//检索发布的csv文件varcsvFile=context.Request.Files["csv"];//将文件保存到磁盘以便CMD行util可以访问它varfilePath=Path.Combine("csv",String.Format("{0:n}.csv",jobID));csvFile.SaveAs(文件路径);varpsi=newProcessStartInfo("mycsvutil.exe",String.Format("-file{0}",filePath)){WorkingDirectory=Environment.CurrentDirectory,UseShellExecute=false,RedirectStandardOutput=true,RedirectStandardError=true,CreateNoWindow=true};using(varprocess=newProcess{StartInfo=psi}){//委托将流程输出写入响应输出ActiondataReceived=((sender,e)=>{if(e.Data!=null)//有时收到一个带有空数据的随机事件,不知道为什么-我pr想把它去掉{context.Response.Write(e.Data);context.Response.Write(Environment.NewLine);context.Response.Flush();}});process.OutputDataReceived+=newDataReceivedEventHandler(dataReceived);process.ErrorDataReceived+=newDataReceivedEventHandler(dataReceived);//使用text/plain以便保留换行符和任何其他空白格式context.Response.ContentType="text/plain";//启动进程并开始读取标准和错误输出process.Start();process.BeginErrorReadLine();process.BeginOutputReadLine();//等待进程退出process.WaitForExit();//非0的退出代码通常表示错误if(process.ExitCode!=0){context.Response.StatusCode=500;}}}#endregion}命令正在服务器端运行任何代码都在服务器上运行。您提供的示例中的代码工作正常。您只需要确保在服务器上正确设置该实用程序并且您对目录/文件具有权限。以上就是C#学习教程:在ASP.NET中执行命令行工具全部内容分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: