RSS订阅 | 匿名投稿
您的位置:网站首页 > 压缩 > 正文

Delphi结合WinRAR生成自解压文件

作者:admin 来源: 日期:2013/10/10 16:24:16 人气: 标签:

最近写的一个程序需要将新编译的文件打包成自解压文件供用户去安装,在程序中通过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命令和自解压注释命令的简单应用,读者可以依据二者创建出功能更加丰富的自解压工具。也欢迎大家分享其他的实现方法。 


    读完这篇文章后,您心情如何?
    0
    0
    0
    0
    0
    0
    0
    0
    本文网址: