如何删除运行应用程序(自身)的文件夹?

时间:2013-12-13 16:20:51

标签: delphi

从我想要删除文件夹的应用程序。问题是该文件夹还包含该应用程序。因此,只要应用程序正在运行,文件夹就会被锁定。如何删除该文件夹?

首先想到的是在'Temp'中复制该应用程序并从那里运行它。这样它就会释放文件夹。虽然不是一个非常优雅的解决方案......

操作系统是Win7,但它应该适用于从Win2K到Win 8的所有操作系统。 目标是让应用程序自行卸载(清理其文件夹,然后自行删除)。


有人建议如果我在我的应用程序中执行此操作,它将起作用。它没有。

  

SetCurrentDir(SomeOtherFolder);

1 个答案:

答案 0 :(得分:2)

在Windows上,可执行文件在进程执行时被锁定,无法删除文件。因此,您需要等到进程停止执行才能删除可执行文件。

在我看来有两种选择是可行的:

  1. 使用其他进程执行删除。该进程可以等到目标进程停止然后执行删除。
  2. 使用MoveFileEx传递MOVEFILE_DELAY_UNTIL_REBOOT标志,并为目的地传递nil。