java获取注册表程序路径,运行exe程序

先获取程序所在目录绝对路径

通过注册表reg query查询

缩写: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);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值