Gold mine of Visual C++ tricks!
Archive for May 19, 2008
How to mark your file for deletion after next reboot?
May 19th
![]()
You might have seen, while un-installing some applications, the uninstaller says – “Some files remains and will be removed after next reboot”. How they can mark a file to be deleted after next restart?
![]()
The answer is MoveFileEx(). The MoveFileEx() have a special flag MOVEFILE_DELAY_UNTIL_REBOOT. By specifying it, the file will be marked for deletion during the next reboot. See the sample code snippet.
void MarkFileForDeletion(CString csFileName )
{
MoveFileEx( csFileName, // Source File.
0, // Destination as null.
MOVEFILE_DELAY_UNTIL_REBOOT );
}
![]()
Actually, the MoveFileEx(), places the filename pair in the registry at – HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations. The PendingFileRenameOperations is of type REG_MULTI_SZ which can hold multiple strings. So that it can hold multiple pairs of source-destination filenames.
![]()
The MoveFileEx() is only applicable for Windows NT family. For Windows 95/98/Me you’ve to modify the WININIT.INI file. In that file, you’ve to modify the [rename] section. Since an old 95 box is not available, i couldn’t try it. If you have, just try and let me know!
![]()
Targeted Audience – Intermediate.