【发布时间】: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