流程(CMD)未关闭,因此无法启动新流程

时间:2019-01-03 13:17:34

标签: c# cmd process

我创建了一个CMDHandler类来处理我在项目中拥有的所有CMD命令。

例如:

CMDHandler.Run(“ / c \”“ + DWClientSetupChainerV1 +” \“”);

CMDHandler.Run(“ taskkill / F / IM \” DWClientSetupChainerV1 .exe \“”);

尽管我的CMDHandler进程似乎从未关闭,因此无法启动第二个进程。有人知道我在做什么错吗? 仅供参考:并非总是使用Exitcode。

namespace Automated_Tests
{
    class CMDHandler
    { 
        private static readonly ILogger logger = LoggerFactory.Create(typeof(Program));

        public int Run(string command)
        {
            var proc = new Process();

            try
            {
                ProcessStartInfo startInfo = new ProcessStartInfo()
                {
                    FileName = "CMD",
                    Arguments = command,
                    UseShellExecute = false
                };
                proc = Process.Start(startInfo);
                proc.WaitForExit();

                return proc.ExitCode;
            }
            catch (Exception ex)
            {
                logger.Log(LogLevel.Error, ex.Message);
            }
            finally
            {
                proc.Close();
            }
            return 0;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我通过为CMDHandler.Run方法创建单独的任务找到了解决方法:

Task setupTask = new Task(() => CMDHandler.Run("/c  \"" + DWClientSetupChainerV1 + "\""));
setupTask.Start();
Thread.Sleep(10000);
Task killSetupTask = new Task(() => CMDHandler.Run("/c taskkill /F /IM \"DWClientSetupChainerV1.exe\"", true));
killSetupTask.Start();
Task.WaitAll(setupTask, killSetupTask);