2015-04-01 23 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批次的末尾。

我敢肯定,没有任何辅助批次有更聪明的解决方案...