当前位置: 代码迷 >> J2SE >> 请问一个java程序删除自身的有关问题
  详细解决方案

请问一个java程序删除自身的有关问题

热度:100   发布时间:2016-04-24 01:15:32.0
请教一个java程序删除自身的问题
想实现这样的功能,程序自身运行完后删除自己这个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文件看來可以在程序執行時被刪除
  相关解决方案