项目有一个需求需要通过网页超链接唤醒本地桌面程序,有一个小bug是重复打开桌面程序。需要后台开一个接口来判断本地桌面程序是否打开。可以通过以下简单的方法来实现。
要检测本地指定路径下某一个程序是否在运行,可以使用Java的ProcessBuilder类来实现。以下是一个示例代码:
拿todesk远程软件来举例
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;
}
}
测试结果
实现逻辑说明:
使用
ProcessBuilder
来执行操作系统命令来获取运行中的程序列表。在Windows系统中,使用tasklist
命令获取程序列表;在非Windows系统中,使用ps -e
命令获取程序列表。然后遍历获取到的程序列表,判断是否包含要检测的程序名,如果包含则表示该程序正在运行。
请根据实际情况修改
programPath
变量的值,使其指向要检测的程序路径。