用批处理问题替换程序

时间:2015-04-01 12:27:27

标签: java windows batch-file cmd

我想创建程序的自动更新程序 在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文件 当我从带有发送参数的cmd调用它时,这个bat文件非常有用 但是,当我尝试从java程序中使用它时,什么也没发生 正如我发现的那样,从当前程序创建的所有Dialog窗口都具有相同的processID。 (我是用另一只蝙蝠测试的) 所以,我的猜测是从我的java程序调用的批处理获得相同的processID并自杀。
我对吗?如果是的话 - 我可以这样做吗?

1 个答案:

答案 0 :(得分:1)

我猜您需要在另一个update.bat实例中启动cmd,如下所示(根据需要添加路径)。在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命令添加到 start ed批处理的末尾。

我确信有一个没有任何辅助批次的更智能的解决方案......