c# - 通过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);
}
我希望有人能以合乎逻辑的方式帮助我确定我是否关闭了应用程序或我正在编写的代码以了解应用程序何时启动,然后在应用程序关闭后立即告诉我
谢谢
解决方案
您正在使用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")
推荐阅读
- javascript - Laravel 8,Jetstream,惯性:在 DOM 中寻找应用程序
- python - 未能正确使用 pandas .all()
- javascript - 过滤一个字符串中的单词
- c++ - C++中'\0'的解释
- jquery - 带有ajax的django应用程序用于处理数据帧
- python - 如何在 Django 的弹出模式中显示日期?
- java - 当序列化已被注释更改时,如何从 java 类中提取 Jackson 属性名称?
- c# - 我想通过C#应用程序获取电报桌面版控制的句柄
- google-apps-script - 同一行上的单元格被更新时的自动时间戳并计算特定日期的条目
- vue.js - 当另一个对象更改时对象的属性发生更改,即 VUEJS 中对象的副本