2015-04-01 24 views
0

我想創建我的程序的自動更新程序。
在java中的一部分,它看起來像用批次問題替換程序

int pid = Kernel32.INSTANCE.GetCurrentProcessId();      
String cmd = folder + "update.bat" + " " + currentLoc + " " + updateLoc + " " + Integer.toString(pid); 
Runtime.getRuntime().exec(cmd); 

而且該批次含有

SET "name=GameDrive Logs Viewer.exe" 
SET "myname=update.bat" 
TASKKILL /pid %3 
TASKKILL /pid %3 
DEL "%1\%name%" 
MOVE "%2\%name%" "%1" 
"%1\%name%" 
DEL "%2\%myname%" 

所以,我殺死現有的程序和刪除。
然後我將新版本移動到舊文件夾,運行新版本,並刪除bat文件。
這個bat文件是完美的作品,當我從cmd發送參數調用它。
但是,當我嘗試從Java程序使用它時,什麼都沒有發生。
正如我所發現的,從當前程序創建的所有對話窗口都具有相同的processID。 (我從另一隻蝙蝠測試過它)。
所以,我的猜測是從我的java程序調用的批處理獲得相同的processID並自殺。
對嗎?如果是的話 - 我可以怎麼做?

回答

1

我想你需要在另一個cmd實例中啓動你的update.bat,如下所示(根據需要添加路徑)。在JAVA中使用updatecall.bat與下一個內容:

要麼與CMD.exeStart a new CMD shell and (optionally) run a command/executable program

cmd /C ""update.bat" %*" 

STARTStart a program, command or batch script (opens in a new window.)

start "" "update.bat" %* 

如果開始編一個批處理文件,則命令處理器運行與/K開關cmd.exe。這意味着該窗口在批次運行後將趨於保持。要自動關閉它,請將EXIT命令添加到開始 ed批次的末尾。

我敢肯定,沒有任何輔助批次有更聰明的解決方案...