Exe程序运行后,如何把自己删除(100分)

  • 主题发起人 主题发起人 Victortim
  • 开始时间 开始时间
V

Victortim

Unregistered / Unconfirmed
GUEST, unregistred user!
;一个Exe程序运行后,如何在Exe程序内部编程,把自己删除
如:如何在A.dpr中编程,使A.exe运行后,把A.exe文档删除
 
这个,,应该可以办到,,只是我也不懂,但有另外的法子,,就是破坏EXE文件结构,
(类似于病毒),,删除嘛,,,我不知道...
 
在regedit 中自动删除
 
; a common trick to make a program self-destruct is to have it
write a tiny batch file, and, as the very last thing it does before
closing, starting this batch file with a winexec(batchfilename, SW_HIDE );
The batch deletes the program and then can delete itself.
The last line is a
del %0

and it is *not* terminated with a carriage return/line feed pair.

-程序员大本营
 
已答问题中找, 那是个很简单但很有效的解决办法, 在程序结束时生成一个BAT, 在那
里删除程序本身并删除BAT自己.
 
;如果用一般方法区删除,由于A.Exe已运行,所以windows不允许删除。
但象一些Uninstall程序,它们能把自己和它所在的文件夹一起删除。why?whow?
 
To pxlei:
我试过了,这个方法不行!!!
 
如果是要在程序退出后删除,pxlei的方法绝对可以!如果是要在运行过程中,难度大些,
方法可以是首先将哪个执行文件该成另一个名字,然后删除就行了!
 
对不起,试了一下,这样也不行!
 
关注,那些 unwise.exe 是怎么做的?
 
一般的Uninstall程序是调用windows目录下的unwise.exe 或 uninst.exe ( 这些好象是
win98,或程序安装时有的),,
 
正在运行的程序不可能被删掉,如果真的被删掉,你要找Bill了。
Uninstall都是在windows下面的。如Isun0804.exe (install shield 中文的反安装)
如果在程序所在目录下,它肯定要求你重启,或就留在那里不删掉。
重起时候可以设置autoexec.bat 或 注册表的RunOnce...(比较常用)
 
win98下
a.exe colse 时
winexec(‘command.com /k del a.exe’,1);
a.exe 要是短文件名(包含短path)
nt :((
 
cAkk发表在《计算机世界报》上的文章

以delphi为例,在form关闭的时候执行以下函数closeme即可:

procedure TForm1.closeme;
var f:textfile;
begin
assignfile(f,'./delme.bat');
rewrite(f);
writeln(f,'@echo off');
writeln(f,':loop');
writeln(f,'del "'+application.ExeName+'"');
writeln(f,'if exist ./file.exe goto loop');
writeln(f,'del ./delme.bat');
closefile(f);
winexec('./delme.bat', SW_HIDE);
close;
end;

可以吧
 
Windows目录下有一文件wininit.ini,它的作用就是用于删除、更名和更新在windows运行
时不能施以这些操作的文件,它存在的时间很短,所以显的有点神秘。
它的格式如下:
[rename]
......
filename1=filename2
//该行相当于Copy filename2 filename1 及del filename2这两条DOS命令。
//启动时,windows将用filename2覆盖filename1,再删除filename2,
//这就实现了用filename2与更新filename1的目的,如果filename1不存在,实际结果是
//将filename2改名为filename1;如果只想删除文件,可令filename1为nul如下:
[rename]
......
nul=filename2 //将删除filename2
......
注意:filename1和filename2必须包含完整路径,又因为winint.ini文件的处理是在
windows文件系统调入之前,所以不支持长文件名。
 
; 好像某些破坏的程序:)
 
win2000说得对,我试过没问题,如果要源码,可以。。。
另外,写入注册表,在系统下次启动时删除文件也行吧?
 
同意wjiachun
我用此法,感觉甚好!
 
agree wjiachun
 
后退
顶部