主页 > 编程资料 > Delphi >
发布时间:2015-09-22 作者:网络 阅读:223次


最近写的一个程序需要将新编译的文件打包成自解压文件供用户去安装,在程序中通过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;






关键字词: