首页 > 解决方案 > 通过cmd启动程序时判断进程是否已经结束

问题描述

正如我的标题所暗示的,我面临的问题是确定我开始使用命令行的程序是关闭还是结束。

我尝试了许多不同的方法来检查程序是否已经退出,使用进程 ID 甚至使用循环,不幸的是我似乎无法让它工作。我相信这是因为我创建了一个使用命令行启动程序的进程,而不是指向一个目录来启动程序的方法。我使用命令行的原因是程序的路径位于 Program (x86) 中,由于我猜的空间,这对我不起作用。

启动应用程序的代码部分

ProcessStartInfo start = new ProcessStartInfo("cmd.exe", "/c cd / & /x & cd PROGRA~2 & cd Truvelo & cd DCM & start dcm.exe");
int exitCode;
using (Process proc = Process.Start(start))
{
proc.WaitForExit();
exitCode = proc.ExitCode;
}

我确实尝试过类似的事情,但是我相信它不起作用,因为我使用命令行使用另一个进程启动了应用程序。

System.Diagnostics.Process[] proc = System.Diagnostics.Process.GetProcessesByName(sProcessName);
  if (proc.Length > 0)
  {
      MessageBox.Show(String.Format("{0}is  running!", sProcessName), sProcessName);
  }
  else
  {
      MessageBox.Show(String.Format("{0}is not running!", sProcessName), sProcessName);

   }

我希望有人能以合乎逻辑的方式帮助我确定我是否关闭了应用程序或我正在编写的代码以了解应用程序何时启动,然后在应用程序关闭后立即告诉我

谢谢

标签: c#visual-studioprocessexit

解决方案


您正在使用cmd start并且此命令不等待启动的应用程序结束。您的 proc 变量正在跟踪进程,因此cmd未启动,dcm并且该进程在 dcm 启动时结束,但未结束。

您可以添加/WAIT命令选项或不使用start命令dcm.exe直接执行。

/c cd / & /x & cd PROGRA~2 & cd Truvelo & cd DCM & start dcm.exe /WAIT

/c cd / & /x & cd PROGRA~2 & cd Truvelo & cd DCM & dcm.exe

或者根本不使用 cmd ,而是更直接地从 c# 启动 dcm :

new ProcessStartInfo(@"C:\Program Files (x86)\Truvelo\DCM\dcm.exe")

推荐阅读