先获取程序所在目录绝对路径
缩写:HKCR=HKEY_CLASSES_ROOT
FullKey - 以 ROOTKEY\SubKey 名称形式
ROOTKEY - [ HKLM | HKCU | HKCR | HKU | HKCC ]
SubKey - 在选择的 ROOTKEY 下的注册表项的全名
REG QUERY HKCR\ApplicationNameXTFW\shell\open\command /ve
获取注册表里的程序所在目录
/**
* 读取注册表指定节点所有的键值对
* @param nodePath
* @return
*/
public static String getRegValue(String nodePath) {
List<String> regList = new ArrayList<>();
try {
//cmd命令:REG QUERY HKCR\ApplicationNameXTFW\shell\open\command /ve
Process process = Runtime.getRuntime().exec("reg query " + nodePath);
process.getOutputStream().close();
InputStreamReader isr = new InputStreamReader(process.getInputStream());
String line = null;
BufferedReader ir = new BufferedReader(isr);
while ((line = ir.readLine()) != null) {
//[,
// HKEY_CLASSES_ROOT\ApplicationNameXTFW\shell\open\command
// , (Ĭ��) REG_SZ D:\YWXT\nw.exe
// , ]
regList.add(line);
}
process.destroy();
} catch (IOException e) {
log.error("读取注册表失败, nodePath: " + nodePath, e);
}
//regList.get(2):" (Ĭ��) REG_SZ D:\YWXT\nw.exe"
String[] s = regList.get(2).split(" ");
/** s
* 0:
* 1:
* 2:
* 3:
* 4:(Ĭ��)
* 5:
* 6:
* 7:
* 8:REG_SZ
* 9:
* 10:
* 11:
* 12:D:\YWXT\nw.exe
*/
return s[12];
}
java启动exe程序
Runtime runtime = Runtime.getRuntime();
try {
//exec("绝对路径")
Process exec = runtime.exec(regValue);
} catch (IOException e) {
e.printStackTrace();
}
/**
* 通过注册表获取协同服务助手安装的绝对路径,启动程序
*/
public void bootXTFWHelperByregistry() {
String nodePath = "HKCR\\ApplicationNameXTFW\\shell\\open\\command";
String regValue = Utils.getRegValue(nodePath);
System.out.println("注册表 :" + regValue);
Runtime runtime = Runtime.getRuntime();
try {
Process exec = runtime.exec(regValue);
System.out.println("exec.isAlive():" + exec.isAlive());
//exec.destroy();
} catch (IOException e) {
log.error("启动协同服务助手异常:{}", e.getMessage(), e);
}
}