当c#程序结束时,cmd.exe进程不会停止

时间:2018-02-12 18:47:16

标签: c# cmd

我有一个c#程序可以通过为cmd.exe创建一个进程并启动它来启动程序来启动另一个程序。这非常有效。但是,当c#程序终止时,cmd.exe进程不会停止。因此,如果我运行程序5次,则仍会打开5个cmd.exe进程。

我是否需要明确关闭进程?这个过程可能并不总是开放的,所以我不确定最好的方法。我的意图是使用'使用'声明是这样的,cmd.exe进程在完成后将被释放。

                using (Process cmd = new Process())
            { 
                cmd.StartInfo.FileName = "cmd.exe";
                cmd.StartInfo.CreateNoWindow = true;
                cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                cmd.StartInfo.WorkingDirectory = System.IO.Path.GetDirectoryName(SimProperties.dbJarPath);
                cmd.StartInfo.Arguments = String.Format("{0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11}",
                    "/k",
                    "java",
                    "-Xms2048m",
                    "-Xmx2048m",
                    "-XX:NewRatio=3",
                    "-Xss1024m",
                    "-XX:+UseParallelGC",
                    "-XX:MaxGCPauseMillis=100",
                    "-XX:ParallelGCThreads=9",
                    "-jar",
                    SimProperties.dbJarPath,
                    SimProperties.dbScenarioPath);

                cmd.Start();
            }    

2 个答案:

答案 0 :(得分:1)

cmd.exe与您的应用程序不同,因此您需要明确释放它。
您可以像这样杀死所有cmd进程:

Array.ForEach(Process.GetProcessesByName("cmd"), x => x.Kill());

可以在应用程序的结束事件中执行此行。

答案 1 :(得分:0)

您的cmd.exe会执行命令(java控制台),然后返回命令提示符。

CMD / K Run Command然后返回CMD提示符。

https://ss64.com/nt/cmd.html

请尝试CMD /c

您也可以在不调用控制台的情况下运行java控制台。而不是:

cmd.StartInfo.FileName = "cmd.exe";

尝试

cmd.StartInfo.FileName = "C:\...full path to your java...\java.exe";