2013-12-13 37 views
1

從應用程序中我想刪除一個文件夾。問題是該文件夾還包含該應用程序。所以,只要應用程序正在運行,文件夾被鎖定。我如何刪除該文件夾?如何刪除運行應用程序(self)的文件夾?

第一個想法是在'Temp'中製作該應用程序的副本並從那裏運行它。這樣它會釋放文件夾。雖然不是一個非常優雅的解決方案....

操作系統是Win7,但它應該可以在Win2K上運行到Win 8. 目標是讓應用程序自我卸載(清理其文件夾,然後自我刪除)。


有人建議,如果我在我的應用程序中這樣做,它將工作。它沒有。

SetCurrentDir(SomeOtherFolder);

+0

作爲[dummzeuch說](猜測此問題)(http://stackoverflow.com/questions/4014268/how-do-i-delete-a-folder-that-another-process-has-open#comment4312030_4014883),猜測這個可能無法做到。你在這裏的最終目標是什麼? – admdrew

+1

可能的重複http://stackoverflow.com/q/4014268 –

+0

只要您的應用程序正在運行,您就無法做到這一點。如果您需要將應用程序保留在屏幕上,而正在運行的文件夾正在被刪除,那麼您運氣不好。另一方面,如果你只想關閉所有東西,擺脫它運行的exe和文件夾,那應該是可行的。我會創建一個小型清理應用程序,將其複製到臨時文件夾,與您所建議的內容非常相似。然後從主應用程序運行清理應用程序並退出。清理應用程序然後刪除所有內容並退出。 –

回答

2

在Windows上,可執行文件在進程執行時被鎖定,以致文件無法刪除。因此,在刪除可執行文件之前,您需要等待進程停止執行。

有跡象表明,在我看來是可行的兩種選擇:

  1. 使用另一個進程執行刪除操作。該進程可以等到目標進程停止後再執行刪除操作。
  2. 使用MoveFileEx傳遞MOVEFILE_DELAY_UNTIL_REBOOT標誌,並將nil作爲目標。
+0

謝謝大衛。我會嘗試第二件事。公認。 – Ampere

相關問題