首先通过:java.lang.management包提供的接口获取当前进程ID;接下来利用wmic命令根据进程ID获取进程exe的目录。代码如下:

/**
* Windows下获取运行当前程序的java.exe完整路径
* 返回示例:C:\Program Files\Java\jdk1.8.0_191\bin\java.exe
*
* @return
*/
public static String getCurrentJavaHome() {
try {
//获取程序自己的pid
String pid = ManagementFactory.getRuntimeMXBean().getName().split("@")[0];
//执行wmic命令获取自己被那个java.exe执行
String command = String.format("wmic process %s GET ExecutablePath", pid);
Process process = Runtime.getRuntime().exec(command);
List lines = IOUtils.readLines(process.getInputStream(), "UTF-8");
//等待执行完毕
process.waitFor();
for (String line : lines) {
if (line.contains("\\")) return line.trim();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}