如何自动删除我的 Delphi 程序?我试过这段代码:
procedure DeleteSelf;
var
module : HMODULE;
buf : array [ 0 .. MAX_PATH - 1 ] of char;
p : ULONG;
hKrnl32 : HMODULE;
pExitProcess, pDeleteFile, pFreeLibrary : pointer;
begin
module := GetModuleHandle ( nil );
GetModuleFileName ( module, buf, sizeof ( buf ) );
CloseHandle ( THandle ( 4 ) );
p := ULONG ( module ) + 1;
hKrnl32 := GetModuleHandle ( 'kernel32' );
pExitProcess := GetProcAddress ( hKrnl32, 'ExitProcess' );
pDeleteFile := GetProcAddress ( hKrnl32, 'DeleteFileA' );
pFreeLibrary := GetProcAddress ( hKrnl32, 'FreeLibrary' );
asm
lea eax, buf
push 0
push 0
push eax
push pExitProcess
push p
push pDeleteFile
push pFreeLibrary
ret
end;
end;
但是不行,不要删除文件。我的程序是控制台。 谢谢!
最佳答案
您的代码仅 可以在Windows NT 和2000 下运行。因为在这些操作系统中,系统会保留对内存映射文件的用户模式句柄引用,该文件支持磁盘上的可执行镜像。 在这些 Windows 版本中,此句柄的值始终为 0x4。
删除自己的exe最有效的方法是创建一个处于挂起状态的子进程,注入(inject)代码等待父进程(删除的exe),然后检测父进程何时退出,删除父进程最后杀死子进程。
您可以在这些推荐资源中找到有关此主题的更多信息。
关于windows - Delphi自删除程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11197542/