我的标题所面临的问题是确定我使用命令行启动的程序是否已关闭或结束。
我尝试了多种方法来检查程序是否退出,甚至使用循环也使用进程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);
}
我希望有人能够以一种逻辑上的方式帮助我确定我是否关闭了该应用程序或我正在编写的代码,以了解该应用程序何时启动,然后在关闭该应用程序后立即告诉我
谢谢
答案 0 :(得分:0)
您正在使用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")