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