请问XP下,D7能否实现程序删除自身。

guitarheaven 2006-02-21 03:04:52
procedure DeleteSelf;
var
pExitProcess: Pointer;
pDeleteFile: Pointer;
pUnmapViewOfFile: Pointer;
hModule: THANDLE;
cBuf:array[0..MAX_PATH]of Char;
begin
hModule := GetModuleHandle('kernel32');
if hModule <> 0 then
begin
pExitProcess := GetProcAddress(hModule, 'ExitProcess');
pDeleteFile := GetProcAddress(hModule, 'DeleteFileA');
pUnmapViewOfFile := GetProcAddress(hModule, 'UnmapViewOfFile');
end else
begin
pExitProcess := nil;
pDeleteFile := nil;
pUnmapViewOfFile := nil;
end;
hModule := GetModuleHandle(nil);
GetModuleFileName(hModule, cBuf, Sizeof(cBuf));
CloseHandle(THANDLE(4));
asm
XOR EAX, EAX;
PUSH EAX;
PUSH EAX;
LEA EAX, cBuf;
PUSH EAX;
MOV EAX, pExitProcess;
PUSH EAX;
MOV EAX, hModule;
PUSH EAX;
MOV EAX, pDeleteFile;
PUSH EAX;
MOV EAX, pUnmapViewOfFile;
PUSH EAX;
RET;
end;
end;

像这种程序,现在测试是不能成功的
请问各位有没有好办法?
泄泻!
...全文
163 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
beyondsun 2006-02-22
  • 打赏
  • 举报
回复
用生成BAT的方法在程序消亡之前调用,当然BAT是隐藏模式调用,而且会删除程序&BAT本身,这样不就好了么?
woshihaoge 2006-02-22
  • 打赏
  • 举报
回复
CREATEFILE 这个涵数在创建文件的时候,会有个文件属性设置的,你可以参照一下
ly_liuyang 2006-02-22
  • 打赏
  • 举报
回复
上面的代码绝对无效的
只能用BAT方法
guitarheaven 2006-02-21
  • 打赏
  • 举报
回复
嗯,也知道这种方式,但是最好是不用生成bat,呵呵
老之 2006-02-21
  • 打赏
  • 举报
回复
见过有人这样做:在程序里生成一个bat文件,写入删除代码,在Application.Terminate之前调用这个bat就可以自我删除
cuteant 2006-02-21
  • 打赏
  • 举报
回复
自动生成一个bat好了,呵呵

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧