A implementação Java detecta se um programa está sendo executado no caminho local especificado

O projeto tem um requisito para ativar o programa de área de trabalho local por meio de um hiperlink de página da Web, e há um pequeno bug que abre repetidamente o programa de área de trabalho. Uma interface precisa ser aberta em segundo plano para determinar se o programa da área de trabalho local está aberto. Isso pode ser alcançado pelo seguinte método simples.

Para detectar se um programa está sendo executado no caminho local especificado, você pode usar a classe Java ProcessBuilder para obter. Aqui está um código de exemplo:

Tome o software remoto todesk como exemplo

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;
    }
}

Resultado dos testes

 Descrição da lógica de implementação:

Use ProcessBuilderpara executar um comando do sistema operacional para obter uma lista de programas em execução. No sistema Windows, use tasklisto comando para obter a lista de programas; no sistema não Windows, use ps -eo comando para obter a lista de programas.

Em seguida, percorra a lista de programas obtida para determinar se o nome do programa a ser detectado está incluído e, se estiver incluído, significa que o programa está em execução.

Modifique programPatho valor da variável de acordo com a situação atual para que aponte para o caminho do programa a ser detectado.

Acho que você gosta

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