線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1844
推到 Plurk!
推到 Facebook!

Delphi 程式退出時刪除自身的實現

 
jackkcg
站務副站長


發表:891
回覆:1050
積分:848
註冊:2002-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-26 03:32:48 IP:210.65.xxx.xxx 未訂閱
此為轉貼資料 Delphi 程式退出時刪除自身的實現 好友 goodhope 研究成功 這樣取得的地址實際上是這個封裝代碼的,而這段代碼又處於 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; //////////////////////////////////////////////
------
**********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好

Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind
macchen
初階會員


發表:66
回覆:102
積分:33
註冊:2006-07-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-07-28 14:07:59 IP:219.87.xxx.xxx 訂閱
請問是可以將自身的exe檔刪除嗎?在win7下好像沒反應,只有close掉exe而已?
------
DELPHI初學者
雪貓
一般會員


發表:4
回覆:12
積分:3
註冊:2006-08-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-07-29 17:47:16 IP:220.136.xxx.xxx 訂閱
我有做過一個笨方法,
就是退出時,寫一個DOS批次檔,執行刪除本程式EXE的命令,
執行完畢,再刪掉本身的批次檔

XP下執行沒問題,
檔案在此→http://www.badongo.com/file/25629154
系統時間:2017-12-19 2:25:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!