GetProcessesByName不起作用

本文关键字:不起作用 GetProcessesByName | 更新日期: 2023-09-27 18:08:28

我搜索了很多关于这个问题的信息,但是我仍然无法确定正在运行的进程是否已经完成。当用户点击GUI中的"Go"按钮时,程序将运行约5秒并关闭。当它完成后,我想做一些事情(例如,GUI中的绿色标记)。

我的问题是'GetProcessesByName'显然看不到程序,这很奇怪,因为我在任务管理器中看到它。程序名称为"quartus_pgm.exe"。看看下面的代码,我已经尝试了quartus_pgm,或quartus_pgm.exe,或quartus_pgm.exe32(如在任务管理器中所见),但没有!

如果我把'cmd',它确实看到它(quartus_pgm是从cmd调用),但它不是我要找的。我试过各种方法:

Process[] targetProcess = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(processName));

或者这个

 Process[] processes = Process.GetProcessesByName("quartus_pgm");
                      if (processes.Length > 0)
                        // do something;

或者这个

foreach (var process in Process.GetProcessesByName("quartus_pgm.exe"))
                {
                    // do something;
                }

GetProcessesByName不起作用

尝试删除.exe部分。

foreach (var process in Process.GetProcessesByName("quartus_pgm"))
{
         // do something;
}

From here:

进程名是一个友好的进程名,例如Outlook;它不包括。exe扩展名或路径

试着列出你机器上所有的进程,寻找quartus_pgm进程名。

 foreach (var process in Process.GetProcesses())
 {
     Console.WriteLine(process.ProcessName);
 }

这个方法是否区分大小写?如果你循环遍历这些过程,你找到了吗?

foreach (Process p in Process.GetProcesses())
            {
                if (p.ProcessName.ToLower() == "quartus_pgm")
                {
                }
            }

既然你已经开始自己的过程,为什么不只是保持Process引用它?然后你可以直接输入

if (process.HasExited) { ... }

(不要忘记你必须调用process.Refresh来确保HasExited属性被正确更新)

或者只是等待它的等待句柄(理想情况下使用异步代码)。