Java如何在单独的进程树中执行批处理文件

时间:2012-03-11 17:14:58

标签: java windows process batch-file runtime

我正在为我的Java应用程序编写更新机制。 我创建一个Windows批处理文件,退出我的程序,批处理文件继续删除我的Jar,从远程位置复制新的,启动jar。 我的问题:删除+复制工作,但是 - 应用程序将无法启动。 我认为问题在于我不知道如何让Java在单独的进程树中执行批处理文件。 在运行时:   调用Runtime.getRuntime() 我打开了一个子进程。

所以我的问题 - Java如何在单独的进程树中执行批处理文件?

3 个答案:

答案 0 :(得分:0)

Here是一种使用cmd作为interminent图层的解决方法:

public class Main {
    public static void main(String[] args) throws Exception {
        Process p = Runtime.getRuntime().exec("cmd /c c:\\test.bat");
    }
}

test.bat将包含

@echo off
PING 1.1.1.1 -n 1 -w 5000 >nul
java -jar "[path]"

答案 1 :(得分:0)

我相信答案隐藏在Jakub Zaverka提供的链接中。使用start代替cmd启动批处理文件。这将为批处理提供自己的控制台窗口。

答案 2 :(得分:0)

我解决了这个问题。 这是由于launch4j - 我扭曲了JAR的程序。因为它允许一个实例,即使我删除了升级前文件,它也不允许我从在升级前程序下启动的命令行启动新实例。 现在我在没有一个实例验证的情况下扭曲我的程序,它工作正常! 谢谢大家的帮助!

BTW - 我使用此解决方案验证一个实例 - How to allow running only one instance of a Java program at a time?