如何检查某些 .exe 程序是否在 Windows 上运行(正在处理)?
我正在制作更新一个 .exe 程序的 java 应用程序。因此,如果某个客户端使用该 exe 程序,我的应用程序会要求关闭 exe 程序,并在关闭后自动将 .exe 文件替换为新文件。
您可以在您的 java 程序中运行以下语句。在此之前,您需要知道task 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
}
这是用于检查应用程序是否在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");
同样的原则也适用于删除可执行文件。
您可以尝试运行以下代码:
Runtime rt = Runtime.getRuntime();
并执行“任务列表”
tasklist 返回当前正在执行的进程的列表(如任务管理器的进程选项卡中所示)。
只是对 Java 9或更高版本的用户的建议。
它甚至独立于操作系统:
Interface ProcessHandle
static Stream<ProcessHandle> allProcesses()
更多详情请访问:
https://docs.oracle.com/javase/9/docs/api/java/lang/ProcessHandle.html