想实现这样的功能,程序自身运行完后删除自己这个EXE文件。
通过写一个BAT文件来删除,不知道哪出了问题,请教各位大牛指点迷津。
BAT文件是这样的内容:
:pp
del d:\TestRun.exe
if exist d:\TestRun.exe goto pp
del %0
java文件:
import java.io.*;
import java.io.IOException;
public class TestRun{
public static void main(String[] args){
FileWriter fw = null;
String batcode = ":pp\ndel d:\\TestRun.exe\nif exist d:\\TestRun.exe goto pp\ndel %0";
try{
fw = new FileWriter("d:/te.bat");
fw.write(batcode,0,batcode.length());
fw.close();
String cmd = "cmd.exe /c d:\\te.bat";
Runtime.getRuntime( ).exec( cmd );
}catch(IOException e){
e.printStackTrace();
System.out.println("文件写入错误");
System.exit(-1);
}
}
}
java文件编译后做成TestRun.exe,存在D盘根目录下。
功能实现不了,请各位指点迷津,这个测试程序该怎么写。
100分在线等。
------解决方案--------------------
要能删除这个exe,需要两个条件:
1、另一个独立进程(而非子进程)中执行删除命令;
2、exe程序结束(退出)。
尝试用 start 而非 cmd 命令来启动bat脚本吧。
------解决方案--------------------
have a try
- Java code
public static void main(String[] args){Runtime.getRuntime().addShutdownHook(new Thread() { //追加程序结束hook,也就是说程序结束时会调用这个hook处理 public void run() { Runtime.getRuntime().exec("cmd d:/te.bat"); //在hook处理中调用bat删除程序 }}); //以下是LZ生成bat文件的代码FileWriter fw = null;String batcode = ":pp\ndel d:\\TestRun.exe\nif exist d:\\TestRun.exe goto pp\ndel %0";try{fw = new FileWriter("d:/te.bat");fw.write(batcode,0,batcode.length());fw.close();String cmd = "cmd.exe /c d:\\te.bat";Runtime.getRuntime( ).exec( cmd );}catch(IOException e){e.printStackTrace();System.out.println("文件写入错误");System.exit(-1);}}}
------解决方案--------------------
奇怪,殺死自己的進程之後還可以繼續執行程序嗎(除非不是當前執行進程),addShutDownHook是在JVM生命期內調用的吧
還有class文件看來可以在程序執行時被刪除