请教?如何删除正在运行的程序?(10分)

A

ahui

Unregistered / Unconfirmed
GUEST, unregistred user!
如何删除正在运行的程序?比如a.exe在运行,如何在a.exe中实现删除a.exe!
 
好像是向注册表注册要删除的文件,然后重新启动。
 
请大家告诉源程序呀!
 
为什么没有人回答我,给小弟说一下呀!
 
我没有试过,你试一下

这样取得的地址实际上是这个封装代码的,而这段代码又处于 UnmapViewOfMap 解除映像范围类,因此,到调用 DeleteFile 函数的时候就无法反问到这段代码了。

解决的办法是,用GetProcAddress动态取得这几个API的地址。

Delphi&CB代码如下:

//////////////////////////////////////////////
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;
 
楼上的想法太精妙了
我只能对这册表法补充一下:

[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/RunOnce]
里添加键值,windows会在启动以后删除相应的文件
再配合ExitWindows函数
应该可以达到目的了
 
多人接受答案了。
 
顶部