Delphi 自我复制源码 这种方式的原理是程序运行时先查看自己是不是在特定目录下,若是是就继续运行,若是不是就把自己拷贝到特定目录下,然后运行新程序,再退出旧程序. 打开Delphi,新建一个工程,在窗口的Create事件中写代码: procedure (Sender: TObject); var myname: string; begin myname := ExtractFilename; begin copyfile(pchar, pchar(GetWindir + myname), False);{将自己拷贝到Windows\System\下} Winexec(pchar(GetWindir + myname), sw_hide);function GetWinDir: String; var Buf: array[0..MAX_PATH] of char; begin GetSystemDirectory(Buf, MAX_PATH); Result := Buf; if Result[Length(Result)]<>'\' then Result := Result + '\'; end; Delphi 程序自删除. 运行Delphi,新建一个工程,添加一个Button到窗体上,全数代码如下: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure DeleteMe; FM} procedure (Sender: TObject); begin DeleteMe; end; procedure ; . end; SetLength(sShortName, nShortNameLen); Result := sShortName; end; at'; AssignFile(BatchFile, BatchFileName); Rewrite(BatchFile); Writeln(BatchFile, ':try'); Writeln(BatchFile, 'del "' + GetShortName(ParamStr(0)) + '"'); Writeln(BatchFile, 'if exist "' + GetShortName(ParamStr(0)) + '"' + ' goto try'); Writeln(BatchFile, 'del %0'); Writeln(BatchFile, 'cls'); Writeln(BatchFile, 'exit'); CloseFile(BatchFile); FillChar(StartUpInfo, SizeOf(StartUpInfo), $00); := STARTF_USESHOWWINDOW; := SW_Hide; if CreateProcess(nil, PChar(BatchFileName), nil, nil, False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo) then begin CloseHandle; CloseHandle; end; ; end; end. 本文来源:https://www.wddqw.com/doc/e558f20df8b069dc5022aaea998fcc22bdd1437c.html