VC++中自杀程序代码
有时程序运行完后需要删除自身,把自己用的代码贴上来,供大家学习。
代码一:
bool DelSelf()
{
char FileName[MAX_PATH];
memset(FileName,0,MAX_PATH);
//获取文件路径
GetModuleFileName(NULL,FileName,MAX_PATH);
char *NewFileName;
NewFileName=new char[MAX_PATH];
memset(NewFileName,0,MAX_PATH);
//设置文件属性
SetFileAttributes(NewFileName,FILE_ATTRIBUTE_NORMAL);
//尝试直接删除
if(DeleteFile(FileName))//能直接删掉最好
{
delete[] NewFileName;
return false;
}
//以下API一样,不再啰嗦
wsprintf(NewFileName,"%c:\\RECYCLER\0",FileName[0]);
CreateDirectory(NewFileName,NULL);
SetFileAttributes(NewFileName,FILE_ATTRIBUTE_HIDDEN);
wsprintf(NewFileName,"%c:\\RECYCLER\\%x.tmp\0",FileName[0],GetTickCount());
SetFileAttributes(NewFileName,FILE_ATTRIBUTE_NORMAL);
DeleteFile(NewFileName);
if(!MoveFileEx(FileName,NewFileName,MOVEFILE_REPLACE_EXISTING))
{
delete [] NewFileName;
return false;//动不了就放弃
}
MoveFileEx(NewFileName,NULL,MOVEFILE_DELAY_UNTIL_REBOOT);
SetFileAttributes(NewFileName,FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM);
delete [] NewFileName;
return true;
}
代码二:
创建BAT文件对程序进行删除,方法很简单,通过写一个bat文件,再通过调用bat文件对自身文件进行删除。
void KillProgram()
{
FILE *fp;
char buf[MAX_PATH];
char filepath[MAX_PATH];
HMODULE module;
fp = fopen("c:\\a.bat", "w");
if(fp == NULL)
{
return ;
}
module = GetModuleHandle(0);
GetModuleFileName(module, buf, MAX_PATH);
sprintf(filepath, "\"%s\"", buf);
fprintf(fp, ":Repeat\n");
fprintf(fp, "del %s\n", filepath);
fprintf(fp, "if exist %s goto Repeat\n", filepath);
fprintf(fp, "del \"c:\\a.bat\"\n");
fclose(fp);
ShellExecute(::FindWindow("ConsoleWindowClass", filepath), "open", "c:\\a.bat", NULL, NULL, SW_HIDE);
return ;
}