2015-05-21 31 views
1

我有一个Java应用程序,它应该通过在线下载新版本来自我更新,然后它应该自我删除,我已经管理了更新,现在我需要删除旧的jar文件。 因为我的应用程序将只在Windows上运行,所以我可以使用bat文件,所以我编写了用于创建应该关闭JVM的批处理文件的代码(因此jar文件不会被锁定),那么它应该删除jar文件,然后它应该删除bat文件(bat文件应该能够自我删除)。 的代码是这样的:自我从Windows批处理文件中删除jar

String pat = new File("delete.bat").getAbsolutePath(); 
FileWriter fw = new FileWriter(pat); 
PrintWriter pw = new PrintWriter(fw); 
pw.println("taskkill /F /IM \"java.exe\""); 
pw.println("DEL /F \""+ jarname +"\""); 
pw.println("DEL /F \"delete.bat\""); 
pw.close(); 
System.out.println("cmd /c START \"\" \"" + pat + "\""); 
Runtime.getRuntime().exec("cmd /c START \"\" \"" + pat + "\""); 

那实际工作不是太糟糕了,它删除罐子和蝙蝠,但...删除仍有命令提示符打开后,这是十分可怕的,看看:/ 我甚至在DEL/F“delete.bat”之后尝试退出,但由于蝙蝠已被删除,因此无法读取退出命令... 关于如何使提示关闭的一些想法?

+0

为什么不从Java代码中删除jar?比你想要做的更清洁(和多平台)解决方案。 – Kayaman

回答

1

我用Desktop.getDesktop()解决了这个问题open(new File(pat));

希望这可以帮助某人。

0

您可以通过两种方式

  1. 在蝙蝠脚本 pw.println(“退出”)的最后一行添加退出关闭命令提示符;
  2. 启动CMD与开始,而在cmd

    调用Runtime.getRuntime()EXEC( “启动\ ”\“ \ ”“ +轻拍+ ”\“”);

+0

正如我所说我已经尝试退出,但它没有工作,因为蝙蝠在退出前被删除,并且cmd无法读取退出,无论如何,我会尝试用第二种方式:) –

+0

我不知道为什么,但蝙蝠文件doesen't不是这样开始 –

+0

你可以把你看到的错误,当你开始启动 –