安装与卸载之卸载篇---程序自杀

                        安装与卸载之卸载篇---程序自杀  
                                                                                                                陈经韬  
   
              电脑用得久了,安装的软件乱七八糟,怎么办?一般我们会打开控制面版里的添加删除程序选项,选择相应的卸载选项就可以了。但如果我们能在自己的程序中增加一个删除功能来实现"自杀",则会令软件增色不少。  
            有点电脑常识的人都知道,在Windows下如果程序正在运行,那么是无法将其删除的,当然,也不是绝对不可以。CIH大家应该知道吧,它的核心有两个,一个就是取得Ring0级权限,然后就可以随便干想干的事(比如说修改正在运行的文件),而我们一般的程序是运行在Ring3级上的。顺便提一句---NT下没有Ring的概念,所以CIH对其无效。用Delphi内镶汇编也可以取得Ring0级权限,但如果我们的程序运行在NT或者Win2000下就没有效果了。在说句题外话,现在的编译器都很不错了,大多数程序员都编不出比编译器编译出的更理想的代码,象Delphi,如果将它的某些单元代码改用内镶汇编,在某些方面如字符串处理方面会提高5倍左右的效率,但NT不支持某些汇编代码,如果程序在NT下工作就会出错,怎么办?稳定第一!所以我们不用这个方法,而且,用这个方法有点杀鸡用牛刀的味道。  
        用过DOS的朋友应该还记得批处理文件吧,新建一个批处理文件a.bat,编辑其内容为:del   %0,然后运行它,怎么样?a.bat把自己删除掉了!!!好,我们就用它来进行程序的"自杀"!  
  找一个EXE可执行文件,比如说abc.exe,新建一个批处理文件a.bat,编辑其内容为:  
  :pp  
  del   abc.exe  
  if   exist   abc.exe   goto   pp  
  del   %0  
  先运行abc.exe,再运行a.bat,然后将abc.exe退出,你会发现a.exe和a.bat都没有了!!!按照这个思路,我们可以在程序中根据文件名称写一个批处理,将上面的abc.exe换成自己的EXE文件名就可以了。运行Delphi,新建一个工程,添加一个Button到窗体上,点击Button,写下如下代码:  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var   Selfname,BatFilename,s1,s2:string;  
  BatchFile:   TextFile;  
  begin  
  Selfname:=Extractfilename(application.exename);//取EXE文件自己的名称  
  BatFilename:=ExtractFilePath(Application.ExeName)+   'a.bat';//批处理文件名称  
  S1:='@del   '+Selfname;  
  S2:='if   exist   '+Selfname+'   goto   pp';  
  assignfile(BatchFile,BatFilename);  
  rewrite(BatchFile);  
  writeln(BatchFile,':pp');  
  writeln(BatchFile,S1);  
  writeln(BatchFile,S2);  
  writeln(BatchFile,'@del   %0');  
  closefile(BatchFile);  
  winexe
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值