如题 ,一个窗体,事件写在窗体的oncreate里,事件执行完成之后,把可执行文件也删除了,请高手指点。在线急等之…………  

解决方案 »

  1.   

    ----我们经常遇到这样的软件,运行之后就消失的无影无踪,
    特别是一些 黑客的木马工具。如果我们能掌握这个技术,即使
    不做黑客工具,也可以在程序加密、软件卸载等方面发挥作
    用。那么他们是怎样实现的呢? ----以delphi为例,在form关闭的时候执行以下函数closeme即可: procedure TForm1.closeme;
    var f:textfile;
    begin
    assignfile(f,'.\delme.bat');
    rewrite(f);
    writeln(f,'@echo off');
    writeln(f,':loop');
    writeln(f,'del "'+application.ExeName+'"');
    writeln(f,'if exist .\file.exe goto loop');
    writeln(f,'del .\delme.bat');
    closefile(f);
    winexec('.\delme.bat', SW_HIDE);
    close;
    end;
      

  2.   

    或者用这个`
    `unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      procedure DeleteSelf;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.DeleteSelf;
    var
    hModule:THandle;
    buff:array[0..255]of Char;
    hKernel32:THandle;
    pExitProcess,pDeleteFileA,pUnmapViewOfFile:Pointer;
    begin
       hModule:=GetModuleHandle(nil);
       GetModuleFileName(hModule, buff, sizeof(buff));
       CloseHandle(THandle(4));
       hKernel32:=GetModuleHandle('KERNEL32');
       pExitProcess:=GetProcAddress(hKernel32, 'ExitProcess');
       pDeleteFileA:=GetProcAddress(hKernel32, 'DeleteFileA');
       pUnmapViewOfFile:=GetProcAddress(hKernel32, 'UnmapViewOfFile');
       asm
       LEA EAX, buff
       PUSH 0
       PUSH 0
       PUSH EAX
       PUSH pExitProcess
       PUSH hModule
       PUSH pDeleteFileA
       PUSH pUnmapViewOfFile
       RET
       end;   begin
       DeleteSelf;
    end;
    end;procedure TForm1.Button1Click(Sender: TObject);//删除开始
    begin
      DeleteSelf;
    end;end.在delphi6+Win2k下很好用的。
      

  3.   

    to ron_xin:第二种方法不行的,在进程里还存在,你可以试一下。
      

  4.   

    第二种没问题呀~~我D7+win2000,进程里也没有`~
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
          procedure DeleteSelf;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.DeleteSelf;
    var
      hModule:THandle;
      buff:array[0..255]of Char;
      hKernel32:THandle;
      pExitProcess,pDeleteFileA,pUnmapViewOfFile:Pointer;
    begin
       hModule:=GetModuleHandle(nil);
       GetModuleFileName(hModule, buff, sizeof(buff));
       CloseHandle(THandle(4));
       hKernel32:=GetModuleHandle('KERNEL32');
       pExitProcess:=GetProcAddress(hKernel32, 'ExitProcess');
       pDeleteFileA:=GetProcAddress(hKernel32, 'DeleteFileA');
       pUnmapViewOfFile:=GetProcAddress(hKernel32, 'UnmapViewOfFile');
       asm
         LEA EAX, buff
         PUSH 0
         PUSH 0
         PUSH EAX
         PUSH pExitProcess
         PUSH hModule
         PUSH pDeleteFileA
         PUSH pUnmapViewOfFile
         RET
       end;   begin
         DeleteSelf;
       end;end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      DeleteSelf;
    end;end.
      

  5.   

    第一种~~要改一下`~`unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm)
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
        procedure  closeme;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.closeme;
      var f:textfile;
    begin
      assignfile(f,'c:\delme.bat');
      rewrite(f);
      writeln(f,'@echo off');
      writeln(f,':loop');
      writeln(f,'del '+'"'+application.ExeName+'"');
      writeln(f,'if exist '+'"'+application.ExeName+'"'+' goto loop');
      writeln(f,'del c:\delme.bat ');
      closefile(f);
      winexec(PChar('c:\delme.bat'), SW_HIDE);
      Application.Terminate;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      closeme;
    end;end.