delphi 绿色exe文件自我删除和更新

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 绿色exe文件自我删除和更新相关的知识,希望对你有一定的参考价值。

发布绿色exe文件后,再更新就需要把自己删除,用更新文件代替。  当然还需要其他细节比如隐藏老版本文件,还原老版本文件等 ;

点击更新按钮后,先对自己重命名

procedure TFrmCheckUpdate.ActUpdateNowExecute(Sender: TObject); // 现在升级
begin
  {$IFDEF MSWINDOWS}
 // RenameFile(Paramstr(0),FormatDateTime(‘yyyymmddhhnn‘,Now)+‘Newname.exe‘); //老版本文件重命名
  if not SaveDialog1.Execute then Exit;
  AppFileName := SaveDialog1.FileName;

  {$ENDIF}

  TThread.CreateAnonymousThread(
    procedure
    begin
      {$IFDEF MSWINDOWS}
      SetFormState(TFormState.fsDownloading);
      HttpDownload(IdHTTP, AppURL, AppFileName, False);
      {$ENDIF}
    end).Start;

end;

在别人家找到一个自己我删除的代码,亲测有效;

procedure TFrmCheckUpdate.DeleteMe;
var
BatchFile: TextFile;
BatchFileName: string;
ProcessInfo: TProcessInformation;
StartUpInfo: TStartupInfo;
begin
BatchFileName := ChangeFileExt(Paramstr(0),‘.bat‘);
AssignFile(BatchFile, BatchFileName);
Rewrite(BatchFile);
// build cmd batch file
Writeln(BatchFile, ‘:try‘);
Writeln(BatchFile, Format(‘del "%s"‘, [ParamStr(0)]));
Writeln(BatchFile, Format(‘if exist "%s" goto try‘, [ParamStr(0)]));//循环删除
Writeln(BatchFile, ‘del %0‘);
CloseFile(BatchFile);
FillChar(StartUpInfo, SizeOf(StartUpInfo), $00);
StartUpInfo.dwFlags := STARTF_USESHOWWINDOW;
StartUpInfo.wShowWindow := SW_HIDE;
// create hidden process
if CreateProcess(nil,PChar
(BatchFileName),nil,nil,False,IDLE_PRIORITY_CLASS,nil,nil,StartUpInfo,ProcessInfo) then// 创建线程 
     begin
       CloseHandle(ProcessInfo.hThread);
       CloseHandle(ProcessInfo.hProcess);
     end;
end;

以上是关于delphi 绿色exe文件自我删除和更新的主要内容,如果未能解决你的问题,请参考以下文章

delphi 删除exe所在的文件夹

DELPHI怎么打包成EXE文件的?

把EXE可执行文件等作为资源包含在Delphi编译文件中

减少exe文件

求教在delphi中,如何把两个exe做为res加入到另一个exe中,并在运行时释放两个exe

求教在delphi中,如何把两个exe做为res加入到另一个exe中,并在运行时释放两个exe