在系统重新启动时删除自己的C++例子:
//在WINDOWS系统目录下,建立一个WININIT。INT文件,里面的内容为:
//[rename]
//NUL=c:/temp/aaa.txt
//以上为要删除的文件名
//删除之后,再删除这个INI文件即可。
//// 系统重新启动时删除一个文件(适用于9X和NT)//
BOOL DeleteFileUntilReboot( LPCTSTR szFileName )
{
#define RENAME_SEC _T("[rename]")
#define WININIT_INI _T("WININIT.INI")
////////////////////////////////////////////////////////////
// 在系统重新启动时,把文件删除
DWORD dwVersion = ::GetVersion();
// Windows NT
if (dwVersion < 0x80000000)
return MoveFileEx( szFileName, NULL, MOVEFILE_DELAY_UNTIL_REBOOT );
// wininit.ini文件路径
TCHAR szWinInitFile[MAX_PATH];
TCHAR szTmpFile[MAX_PATH];
GetWindowsDirectory( szWinInitFile, MAX_PATH );
if ( _T('//') != szWinInitFile[ lstrlen(szWinInitFile)-1 ] )
lstrcat( szWinInitFile, _T("//") );
lstrcpy( szTmpFile, szWinInitFile );
lstrcat( szWinInitFile, WININIT_INI );
lstrcat( szTmpFile, S_TMP_FILE_NAME );
if ( 0xFFFFFFFF == GetFileAttributes( szWinInitFile ) ) {
// 该文件不存在,自己创建
// 95 or 98
// wininit.ini文件内容
CString sText;
sText.Format( _T("/n%s/nNUL=%s/n"), RENAME_SEC, szFileName );
try {
CStdioFile fileInit( szWinInitFile, CFile::modeCreate | CFile::modeWrite );
fileInit.SeekToEnd();
fileInit.WriteString( sText );
fileInit.Close();
} catch(...) {
return FALSE;
}
}
else {
// 该文件存在,则打开之,找到rename块添加之
DelFile( szTmpFile );
try {
CStdioFile fileS( szWinInitFile, CFile::modeRead );
CStdioFile fileT( szTmpFile, CFile::modeCreate | CFile::modeWrite );
CString sRead;
while ( fileS.ReadString( sRead ) )
{
sRead.TrimLeft();
sRead.TrimRight();
fileT.WriteString( sRead );
fileT.WriteString( _T("/n") );
if ( 0 == sRead.CompareNoCase( RENAME_SEC ) ) {
fileT.WriteString( _T("NUL=") );
fileT.WriteString( szFileName );
fileT.WriteString( _T("/n") );
}
}
fileT.Close();
fileS.Close();
// 用新创建的文件替换wininit.ini
DelFile( szWinInitFile );
MoveFile( szTmpFile, szWinInitFile );
}
catch(...) {
return FALSE;
}
}
return TRUE;
}