Delphi结合WinRAR生成自解压文件


本文整理自网络,侵删。

 

最近写的一个程序需要将新编译的文件打包成自解压文件供用户去安装,在程序中通过WinRAR命令结合WinRAR自解压注释命令实现该功能。

WinRAR命令
WinRAR自解压注释命令 

程序界面:



文件目录 为要压缩的目录,默认安装目录为执行生成的自解压文件时默认的安装目录,备注为执行自解压文件时显示的注释。
自解压文件执行界面:
[SinglePic not found]

程序的实现:

首先定义一个公共的自解压注释命令模板 SFX_COMMENT_TEMPLATE.txt

Title=文件安装  

SavePath  

Path=@Path  

Text  

{  

      

          

            

恒生资产管理系统

  

            

  

                注意事项  

                

  • 在没有确定执行该安装时,请慎重执行
  •   

                    
  • 请事先做好相应的备份
  •   

                

      

                

      

                    备注  

                    
      

                    @Comment  

                

      

              

       

          



    @Path 执行自解压文件默认安装目录

    @Comment为备注信息
    程序根据用户选择依据该模板文件生成具体的自解压注释名利文件 comment.txt,并在WinRAR生成解压文件时关联该注释文件。
    生成自解压文件代码:procedure TBuildInstallationForm.btnBuildClick(Sender: TObject);  

    var 

      cmd,CommentTemplate,comment,FileStr,ExeFile: string;  

      FileList,TempList : TStringList;  

      i : Integer;  

    begin 

      if Trim(edtDir.Text) = '' then 

      begin 

        ShowMessage('文件目录不能为空');  

        Exit;  

      end;  

      //打开文件保存对话框  

      with dlgSave do 

      begin 

        if Execute then 

        begin 

          ExeFile := FileName;//要保存的自解压文件  

        end;  

      end;  

       

      CommentTemplate := ExtractFilePath(Application.ExeName) + 'SFX_COMMENT_TEMPLATE.txt';  

      comment := ExtractFilePath(Application.ExeName) + 'comment.txt';  

      FileList := TStringList.Create;  

      FindDirFile(edtDir.Text,FileList); //只获取该目录下的文件 和文件夹2.1.9  

      TempList := TStringList.Create;  

      TempList.LoadFromFile(CommentTemplate); //加载模板文件  

      //注释模板文件较小,这种处理方式不会对性能造成明显影响  

      with TempList do 

      begin 

        Text := StringReplace(Text,'@Path',edtDefaultDir.Text,[rfReplaceAll]);//替换文件路径  

        Text := StringReplace(Text,'@Comment',editComment.Text,[rfReplaceAll]);//替换注释  

      end;  

      TempList.SaveToFile(comment);//保存到注释文件  

      FileStr := '';//文件列表  

      for i := 0 to FileList.Count - 1 do 

      begin 

        FileStr := FileStr + ' "' + fileList.Strings[i] + '"';  

      end;  

       

      //Config.WinRAR WinRAR.exe 路径  

      cmd := Format('"%s" a  -z"%s" -ep1 -sfx "%s" %s',[Config.WinRAR,comment,ExeFile,FileStr]);  

      WinExec(PChar(cmd),SW_SHOWNORMAL);  

      ShowMessage('生成成功!');  

    end; 

    FindDirFile:

    procedure FindDirFile(ASourceDir:string;var fileList : TStringList);  

      var 

      sr : TSearchRec;  

      i : Integer;  

      found : Integer;  

    begin 

      if ASourceDir[Length(ASourceDir)]<>'\' then ASourceDir := ASourceDir + '\';  

      //找出所有的dof文件  

      try 

      found := FindFirst(ASourceDir + '*.*',faAnyFile,sr);  

        while found = 0 do 

        begin 

           if (sr.Name <> '.') and (sr.Name <> '..')then //(sr.Attr =  faDirectory) then  

           begin 

             fileList.Add(ASourceDir + sr.Name );  

           end;  

           found := FindNext(sr);  

        end;  

      finally 

        Findclose(sr);  

      end;  

    end; 

    本文只是对WinRAR命令和自解压注释命令的简单应用,读者可以依据二者创建出功能更加丰富的自解压工具。也欢迎大家分享其他的实现方法。 

    相关阅读 >>

    Delphi processid, process handle, window handle 之间的互相转换

    Delphi 读取正在被占用的txt文件

    Delphi 如何判断一个exe文件是否运行

    Delphi 删除字符串中首个字符

    Delphi xe7android应用启用蓝牙

    Delphi is1251char

    Delphi 判断tcp端口是否被占用的方法

    Delphi case of

    Delphi 删除整个目录

    Delphi fmx获取屏幕方向

    更多相关阅读请进入《Delphi》频道 >>



    打赏

    取消

    感谢您的支持,我会继续努力的!

    扫码支持
    扫码打赏,您说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    分享从这里开始,精彩与您同在

    评论

    管理员已关闭评论功能...