【问题标题】:Determine if a process has Ended when starting the program through CMD通过cmd启动程序时判断进程是否已经结束
【发布时间】:2019-05-08 08:38:17
【问题描述】:

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

我尝试了许多不同的方法来检查程序是否退出,使用进程 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);

   }

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

谢谢

【问题讨论】:

  • var x86path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86);。关于进程终止,请参阅此sample code(使用进程的Exited 事件)。
  • 您好,我尝试过类似的方法,但是我的程序似乎没有启动,就好像它启动了然后突然自行关闭ProcessStartInfo start = new ProcessStartInfo(x86path + "/Truvelo/DCM/dcm.exe"); 是正确的
  • 使用Path.Combine 组合路径的各个部分。不要使用using 语句声明进程。你会处理掉它。在Exited 事件中处理进程(如示例代码所示)。
  • 你可以只拥有proc.StartInfo.FileName = Path.Combine(x86path, @"Truvelo\DCM\dcm.exe");。订阅Exited 事件:proc.EnableRaisingEvents = true; proc.Exited += (obj, evt) => { Console.WriteLine("Closed"); proc?.Dispose(); };。然后,启动进程:proc.Start();。就这样。全部在我链接的示例代码中。

标签: c# visual-studio process exit


【解决方案1】:

您正在使用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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    相关资源
    最近更新 更多