La implementación de Java detecta si un programa se está ejecutando en la ruta local especificada

El proyecto tiene el requisito de activar el programa de escritorio local a través de un hipervínculo de página web, y hay un pequeño error que abre repetidamente el programa de escritorio. Es necesario abrir una interfaz en segundo plano para determinar si el programa de escritorio local está abierto. Se puede lograr mediante el siguiente método simple.

Para detectar si un programa se está ejecutando en la ruta local especificada, puede usar la clase Java ProcessBuilder para lograrlo. Aquí hay un código de muestra:

Tome el software remoto todesk como ejemplo

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
 
public class ProgramRunningCheck {
 
    public static void main(String[] args) {
        String programPath = "C:\Program Files (x86)\ToDesk\ToDesk.exe"; // 要检测的程序路径
 
        if (isProgramRunning(programPath)) {
            System.out.println(programPath + " is running.");
        } else {
            System.out.println(programPath + " is not running.");
        }
    }
 
    public static boolean isProgramRunning(String programPath) {
        boolean isRunning = false;
        String os = System.getProperty("os.name").toLowerCase();
 
        File programFile = new File(programPath);
        String programName = programFile.getName();
 
        try {
            ProcessBuilder processBuilder;
            if (os.contains("win")) {
                // Windows系统
                processBuilder = new ProcessBuilder("tasklist");
            } else {
                // 非Windows系统
                processBuilder = new ProcessBuilder("ps", "-e");
            }
 
            Process process = processBuilder.start();
            InputStream inputStream = process.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
 
            String line;
            while ((line = reader.readLine()) != null) {
                if (line.contains(programName)) {
                    isRunning = true;
                    break;
                }
            }
 
            reader.close();
            inputStream.close();
            process.destroy();
 
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        return isRunning;
    }
}

Resultados de la prueba

 Descripción de la lógica de implementación:

Úselo ProcessBuilderpara ejecutar un comando del sistema operativo para obtener una lista de programas en ejecución. En el sistema Windows, use tasklistel comando para obtener la lista de programas; en el sistema que no sea Windows, use ps -eel comando para obtener la lista de programas.

Luego recorra la lista de programas obtenida para determinar si el nombre del programa a detectar está incluido y, si está incluido, significa que el programa se está ejecutando.

Modifique programPathel valor de la variable de acuerdo con la situación real para que apunte a la ruta del programa que se detectará.

Supongo que te gusta

Origin blog.csdn.net/weixin_39709134/article/details/131857449
Recomendado
Clasificación