从Dot Net MVC 4执行批处理脚本异步

时间:2013-01-10 14:12:55

标签: .net asp.net-mvc-4 console-application async-await

我有一个dot net MVC 4应用程序,其中我用户使用“创建”视图创建请求,并且基于视图中的参数,控制器应该异步执行Windows批处理脚本。

我正在使用以下代码来运行批处理脚本:

Process process = new Process();

ProcessStartInfo ProcessInfo;
ProcessInfo = new ProcessStartInfo("cmd", "/c  batchfile");
ProcessInfo.CreateNoWindow = true;
ProcessInfo.UseShellExecute = false;
ProcessInfo.RedirectStandardError = true;
ProcessInfo.RedirectStandardOutput = true;
ProcessInfo.Arguments = string.Format("{0} {1} {2}", arg1, arg2, arg3); ;

process = Process.Start(ProcessInfo);
process.WaitForExit();

控制台应用程序进程已启动,但它始终挂起/无休止地等待。标准输出日志显示:

Microsoft Windows [Version 6.2.9200]
(c) 2012 Microsoft Corporation. All rights reserved.

C:\Program Files (x86)\IIS Express>

只有当我手动杀死它时,该进程才会退出。我尝试运行Visual Studio管理员模式,但它没有帮助。

任何人都可以建议我如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

这是关于传递给cmd.exe的命令行参数的reference article我建议你检查一下。

然后尝试这样:

var psi = new ProcessStartInfo("cmd.exe")
{
    Arguments = string.Format("/k \"\"batchfile.bat\" \"{0}\" \"{1}\" \"{2}\"\"", arg1, arg2, arg3),
    CreateNoWindow = true,
    UseShellExecute = false,
    RedirectStandardError = true,
    RedirectStandardOutput = true
};

using (var process = Process.Start(psi))
{
    process.WaitForExit();
}