【发布时间】:2012-06-25 21:21:37
【问题描述】:
如何自动删除我的 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;
但它不起作用,不要删除文件。我的程序是控制台。 谢谢!
【问题讨论】:
-
你到底想做什么?只是退出有什么问题?这看起来像是一次回到 Win16 的旅程。
-
我认为这可能的唯一方法是调用另一个程序(或批处理文件),该程序在应用程序退出时执行此操作。如果不依赖另一个外部帮助者,应用程序实际上是不可能删除自己的。
-
所以唯一的解决办法就是创建一个文件。蝙蝠?
-
不一定,唯一的解决方案是依靠可执行文件之外的东西为您完成这项工作。
-
OP 代码有问题。在我修复代码时,问题已关闭。显然这个问题不是重复的,问题是为什么发布的代码不起作用。