2015-05-21 62 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

你可以把你看到的錯誤,當你開始啓動 –