检查一些exe程序是否在Windows上运行

如何在Windows上检查某个.exe程序是否正在运行(正在进行中)?

我正在制作更新一个.exe程序的java应用程序。 因此,如果某个客户端使用该exe程序,我的应用程序会要求关闭exe程序,并在关闭后自动替换新的.exe文件。

您可以在java程序中运行以下语句。 在此之前,您需要知道task managertask manager的名称。 假设你想看MS-Word正在运行。 然后运行MS-Word,转到任务管理器,在进程选项卡下,您应该看到一个名为word.exe的进程。 找出您要定位的流程的名称。 完成后,您只需运行以下代码:

 String line; String pidInfo =""; Process p =Runtime.getRuntime().exec(System.getenv("windir") +"\\system32\\"+"tasklist.exe"); BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); while ((line = input.readLine()) != null) { pidInfo+=line; } input.close(); if(pidInfo.contains("your process name")) { // do what you want } 

您可以尝试运行以下代码:

 Runtime rt = Runtime.getRuntime(); 

并执行“任务列表”

tasklist返回当前正在执行的进程列表(如任务管理器的进程选项卡中所示)。

这是一个完整的代码,用于检查应用程序是否在Windows系统上运行:

 import java.awt.*; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.Scanner; public class ApplicationUtilities { public static void runApplication(String applicationFilePath) throws IOException, InterruptedException { File application = new File(applicationFilePath); String applicationName = application.getName(); if (!isProcessRunning(applicationName)) { Desktop.getDesktop().open(application); } } // http://stackoverflow.com/a/19005828/3764804 private static boolean isProcessRunning(String processName) throws IOException, InterruptedException { ProcessBuilder processBuilder = new ProcessBuilder("tasklist.exe"); Process process = processBuilder.start(); String tasksList = toString(process.getInputStream()); return tasksList.contains(processName); } // http://stackoverflow.com/a/5445161/3764804 private static String toString(InputStream inputStream) { Scanner scanner = new Scanner(inputStream, "UTF-8").useDelimiter("\\A"); String string = scanner.hasNext() ? scanner.next() : ""; scanner.close(); return string; } } 

例如,您可以使用runApplication()方法仅在尚未运行时运行应用程序:

 ApplicationUtilities.runApplication("C:\\Program Files (x86)\\WinSCP\\WinSCP.exe"); 

同样的原则适用于删除可执行文件。

只是对Java 9或更高版本用户的建议。
它甚至独立于操作系统:

 Interface ProcessHandle static Stream allProcesses​() 

更多详情:
https://docs.oracle.com/javase/9/docs/api/java/lang/ProcessHandle.html