Làm cách nào để tự động xóa, chương trình Delphi của tôi? Tôi đã thử mã này:Delphi tự xóa chương trình
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;
Nhưng nó không hoạt động, không xóa tệp. Chương trình của tôi là giao diện điều khiển. Cảm ơn!
Bạn đang thực sự cố gắng làm gì? Có gì sai với chỉ cần thoát? Điều này trông giống như một chuyến đi ngược lại đến Win16. – bmargulies
Cách duy nhất tôi thấy điều này có thể là bằng cách gọi một chương trình khác (hoặc tệp bó) thực hiện điều này khi ứng dụng thoát. Đó là nghĩa đen không thể cho một ứng dụng để xóa tự của nó mà không phụ thuộc vào một người trợ giúp bên ngoài để làm như vậy. –
Vì vậy, giải pháp duy nhất là tạo một tệp. Gậy? –