正如我的标题所暗示的,我面临的问题是确定我开始使用命令行的程序是否已经关闭或结束。
我尝试了许多不同的方法来检查程序是否已经退出,使用进程ID甚至使用循环,不幸的是我似乎不能让它工作。我相信这是因为我创建了一个使用命令行启动程序的进程,而不是指向目录来启动程序的方法。我使用命令行的原因是,程序的路径位于程序(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);
}
我希望有人能以一种合乎逻辑的方式帮助我确定我是否关闭了应用程序,或者我正在编写的代码,以便知道应用程序何时启动,然后在应用程序关闭时立即告诉我
谢谢
发布于 2019-05-08 16:51:25
您正在使用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")
https://stackoverflow.com/questions/56036695
复制相似问题