C++ 自删除程序代码

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 ;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lbjayo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值