不要那些简直调用其他外部程序实现自删除(比如调用cmd,bat文件也是,因为bat也是用cmd运行的)。
我从网上找到了一下代码,怎么都不能删除呢?我系统是XPsp3的
procedure deleteSelf;
var
  hModule: THandle;
  szModuleName: array[0..MAX_PATH] of char;
  hKrnl32: THandle;
  pExitProcess, pdeleteFile, pFreeLibrary, pUnmapViewOfFile: pointer;
  ExitCode: UINT;
begin
  hModule := GetModuleHandle(nil);
  GetModuleFileName(hModule, szModuleName, sizeof(szModuleName));  hKrnl32 := GetModuleHandle('kernel32');
  pExitProcess := GetProcAddress(hKrnl32, 'ExitProcess');
  pdeleteFile := GetProcAddress(hKrnl32, 'deleteFileA');
  pFreeLibrary := GetProcAddress(hKrnl32, 'FreeLibrary');
  pUnmapViewOfFile := GetProcAddress(hKrnl32, 'UnmapViewOfFile');
  ExitCode := system.ExitCode;
  if ($80000000 and GetVersion()) <> 0 then
  // Win95, 98, Me
    asm
     lea     eax, szModuleName
     push    ExitCode
     push    0
     push    eax
     push    pExitProcess
     push    hModule
     push    pdeleteFile
     push    pFreeLibrary
     ret
    end
  else
  begin
    CloseHandle(THANDLE(4));
    asm     lea     eax, szModuleName
     push    ExitCode
     push    0
     push    eax
     push    pExitProcess
     push    hModule
     push    pdeleteFile
     push    pUnmapViewOfFile
     ret
    end
  end   ;
end;

解决方案 »

  1.   

    因为卸载文件时用bat自动杀毒软件会禁止
      

  2.   

    我测试好象是瑞星还是卡巴会报毒,用BAT
      

  3.   

    既然是卸载,为什么不调用shell删除呢,有选项是下次启动时删除
      

  4.   

    我也在找,但是没有找到我想要的效果(和你一样的),所以勇气这个代码也不错
    WinExec(Pchar('cmd /c del '+GetCommandLine),SW_HIDE);
    halt