如何用命令行生成WinRAR自解压文件

时间:2022-08-14 17:42:14

如何用命令行生成WinRAR自解压文件

一、目的:

实现对程序和程序所需要的Source文件进行打包,并能够在自解压完成后,自动执行该程序。

 

二、参考文献:

WinRARHelpHelp 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

 

配置文件会影响自解压文件的显示:

自解压程序的运行界面

其中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/