2017年12月5日 星期二

[BCB][C++] 一個有趣的題目,執行過程中destory自己的資料夾

昨天開始就一直在積極尋找如何刪掉程式所在資料夾
如果開啟C:/app/a.exe
然後在執行中下達刪除C:/app
結果是資料夾內容會全部清空
但C:/app這個資料夾還在

so...
是不是更改呼叫外部的指令可以修正這問題?
WinExec、system、ShellExcute...
是不是可以直接叫bat檔?
是不是另外call 程式可以?

這個是在執行時把自己先複製到temp資料夾
再執行另一個process
目的是可以刪掉exe檔



結果可以成功開起來
也確實可以刪掉當前資料夾中的exe
但是空資料夾還在


學到的cmd指令:
等同於用工作管理員刪除process
taskkill /f /im Project_clone.exe

等待三秒
@ping 127.0.0.1 -n 3 -w 3000 > nul

刪除資料夾以及裏頭的東西
rd C:/app /q /s

最後測試發現只要從程式call
不管用WinExec、system、ShellExcute另一個程式、bat
資料夾就是刪不掉
可能是directory path還在call heap裡
找很久找不到如何解除這個path
後來想到用常駐程式去摧毀
可是對方不要再有另一個service
要安裝很麻煩
我想到用工作排程



這樣就可以了

沒有留言:

張貼留言