如何用命令行生成WinRAR自解压文件
一、目的:
实现对程序和程序所需要的Source文件进行打包,并能够在自解压完成后,自动执行该程序。
二、参考文献:
WinRAR中Help的Help topics提供了详尽介绍,这里只是对涉及的内容进行了归纳,并通过C#在程序中实现。
三、操作步骤:
这里介绍命令行的实现方法,实现环境是C#的Windows Application:
1.生成自解压文件
通过调用WinRAR的命令行和配置参数,实现该功能。
WinRAR的命令行格式:
WinRAR <command> -<switch1> -<switchN> <archive> <files...> <@listfiles...> <path_to_extract\>
在Help中的Command line syntax中有详细介绍,此处用一个例子进行说明:
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents = false;
//RAR在本机的物理位置
proc.StartInfo.FileName = "E:\\Program Files\\WinRAR\\rar";
//a 向压缩文件中增加文件
//-sfx 生成默认的自解压文件
//-O+自动覆盖压缩文件中存在的相同文件
//-ep1不保存完整路径,在自解压的时候不会按照原始的路径进行解压
//第一个G:\\Vincent_Wu_VSS\\New是值生成的自解压文件保存在什么位置,在本例中将会在//G:\Vincent_Wu_VSS\下生成名称为New.exe的自解压文件
//最后的G:\\Vincent_Wu_VSS\\New\\是指将G:\Vincent_Wu_VSS\New\文件夹下的所有文件都添加在自解//压文件中
proc.StartInfo.Arguments = "a -sfx -O+ -ep1 G:\\Vincent_Wu_VSS\\New G:\\Vincent_Wu_VSS\\New\\";
proc.Start();
2.增加自动运行命令
首先需要一个配置文件,以下建立一个名字为Info.txt的配置文件,内容为:
Title=压缩包
Text
{
}
Setup=TryDownLoad.exe
配置文件会影响自解压文件的显示:
图1 自解压程序的运行界面
其中Title会影响图1中标注1处的内容,Text影响标注2处的内容,还可以通过Path来设置标注3处的内容,如果没有设置,默认的内容是安装包目前所在的物理路径。
以下是使用C#来实现对自解压文件的配置:
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = "E:\\Program Files\\WinRAR\\rar";
//c 向压缩文件增加注释
//-z 从文件中读取注释
//G:\\Vincent_Wu_VSS\\info.txt 为配置文件的物理路径
//G:\\Vincent_Wu_VSS\\New.exe 为自解压文件的物理路径
proc.StartInfo.Arguments = "c -zG:\\Vincent_Wu_VSS\\info.txt G:\\Vincent_Wu_VSS\\New.exe";
proc.Start();
四、注意事项
在实际操作中,如果需要将介绍的两个步骤都放在一个程序块中,需要等待步骤1完成,并且生成了对应的自解压文件后,再执行步骤2,实际操作,可以参考下面的例子:
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = "E:\\Program Files\\WinRAR\\rar";
proc.StartInfo.Arguments = "a -sfx -O+ -ep1 G:\\Vincent_Wu_VSS\\New G:\\Vincent_Wu_VSS\\New\\";
proc.Start();
//判断是否生成了自解压文件
while(System.IO.File.Exists("G:\\Vincent_Wu_VSS\\New.exe") == false)
{
System.Threading.Thread.Sleep(1000);
}
proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = "E:\\Program Files\\WinRAR\\rar";
proc.StartInfo.Arguments = "c -zG:\\Vincent_Wu_VSS\\info.txt G:\\Vincent_Wu_VSS\\New.exe";
proc.Start();
原文:http://blog.163.com/yitian_wu/blog/static/130748432200572474159903/