用批处理问题替换程序
Replacing programs with batch issue
我想为我的程序创建自动更新程序。
在 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 windows 都具有相同的 processID。 (我用另一只蝙蝠测试过)。
所以,我的猜测是从我的 java 程序调用的批处理获得相同的 processID 并自杀。
我对吗?如果是的话——我该怎么做?
我想您需要在另一个 cmd
实例中启动您的 update.bat
,如下所示(根据需要添加路径)。在 JAVA 中使用 updatecall.bat
和下一个内容:
与CMD.exe
:Start a new CMD shell and (optionally) run a command/executable program.
cmd /C ""update.bat" %*"
或与START
:Start a program, command or batch script (opens in a new window.)
start "" "update.bat" %*
如果启动一个批处理文件,那么命令处理器是运行,/K
切换到cmd.exe
。这意味着 window 将倾向于在批处理 运行 之后保留。要自动关闭它,请将 EXIT
命令添加到 started 批处理的末尾。
我确定有一个更聪明的解决方案,无需任何辅助批处理...
我想为我的程序创建自动更新程序。
在 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 windows 都具有相同的 processID。 (我用另一只蝙蝠测试过)。
所以,我的猜测是从我的 java 程序调用的批处理获得相同的 processID 并自杀。
我对吗?如果是的话——我该怎么做?
我想您需要在另一个 cmd
实例中启动您的 update.bat
,如下所示(根据需要添加路径)。在 JAVA 中使用 updatecall.bat
和下一个内容:
与CMD.exe
:Start a new CMD shell and (optionally) run a command/executable program.
cmd /C ""update.bat" %*"
或与START
:Start a program, command or batch script (opens in a new window.)
start "" "update.bat" %*
如果启动一个批处理文件,那么命令处理器是运行,/K
切换到cmd.exe
。这意味着 window 将倾向于在批处理 运行 之后保留。要自动关闭它,请将 EXIT
命令添加到 started 批处理的末尾。
我确定有一个更聪明的解决方案,无需任何辅助批处理...