我有一个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();
}
答案 0 :(得分:1)
cmd.exe
与您的应用程序不同,因此您需要明确释放它。
您可以像这样杀死所有cmd进程:
Array.ForEach(Process.GetProcessesByName("cmd"), x => x.Kill());
可以在应用程序的结束事件中执行此行。
答案 1 :(得分:0)
您的cmd.exe会执行命令(java控制台),然后返回命令提示符。
CMD / K Run Command然后返回CMD提示符。
请尝试CMD /c
。
您也可以在不调用控制台的情况下运行java控制台。而不是:
cmd.StartInfo.FileName = "cmd.exe";
尝试
cmd.StartInfo.FileName = "C:\...full path to your java...\java.exe";