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