VC++ 中的 SelfDeleting 应用程序?

pra*_*eep 2 visual-c++

我想删除一个包含当前正在运行的应用程序的文件夹。我该怎么做..?有什么办法吗?即包含应用程序的文件夹应在应用程序运行完成后删除?

Bri*_*ndy 5

您最好的选择可能是使用 Win32 API MoveFileEx。它有一个标志,可以设置为在下次重新启动时删除正在使用的文件,称为MOVEFILE_DELAY_UNTIL_REBOOT. 将新文件名参数设置为MoveFileExtoNULL以执行此类删除。

如果 dwFlags 指定 MOVEFILE_DELAY_UNTIL_REBOOT 且 lpNewFileName 为 NULL,则 MoveFileEx 注册系统重新启动时要删除的 lpExistingFileName 文件。

注意:正在使用的普通文件可以使用 Win32 API DeleteFile正常删除,具体取决于它们是否被打开(使用 Win32 API CreateFileFILE_SHARE_DELETE。我不认为默认情况下在 Windows 上运行程序具有该权限。当指定要删除的文件正在使用但使用此标志打开时,将在最后一个文件句柄关闭时删除该文件。