如何使7-zip自解压文件在解压时自动运行指定的程序

发布时间:2024-05-12 11:03 发布:上海旅游网

问题描述:

我使用7-zip创建自解压包,但是不知道如果使他像winrar一样,指定一个程序,使得在双击这个自解压包的情况下,会在后台解压缩,然后运行指定的程序。
应该问得比较清楚明了吧。假设我压缩了a,b,c 三个文件,将其压缩为自解压文件d,如果设置才能在双击文件d时,会自解压并运行a文件?
我知道winrar和其他一些压缩软件都有此功能,所以请不要跟我推荐他们,我现在只是想了解7-zip在这方面如何使用?

问题解答:

有这个功能,但是实现起来比较烦琐!视窗界面不能实现这个功能(我用的是7-Zip 4.55 beta中文版)。可以在命令行版本中实现,自释放安装模块和自释放模块是两个不同模块,未经压缩的,还要去下载一个UPX 程序来压缩此模块。最终做好的自解压自动运行程序的文件大小跟winrar做出来的文件差不多大小,还不如用winrar了!
要使用这个功能必须要看懂命令行语法,在命令提示符界面输入命令完成,我是参考了帮助文档中的说明来做的。结果还没有制作成功。过程非常烦琐!没有必要折腾自己,软件是用来方便自己用的。既然一点都不方便,还不如等待软件开发者尽快完善其功能!其下是摘自帮助文档中的有关内容:

-sfx (创建自释放档案) 选项
创建自释放档案。

语法
-sfx[{SFX_Module}]

{SFX_Module}
指定将被添加到压缩档案的自释放(SFX)模块。然而被指定的模块必须和 7z.exe 文件在同一目录。如果 {SFX_Module} 未指定,7-Zip 将使用命令行自释放模块 7zCon.sfx。

SFX_Module 说明
7zC.sfx Windows 版本。
7zCon.sfx 命令行(DOS)版本。
7zS.sfx Windows 安装版本。
7zSD.sfx Windows 安装版本(需调用 MSVCRT.dll)。

除 7zC.sfx 之外,大多数的自释放模块都是未压缩的。您可以使用 UPX 程序 (http://upx.sourceforge.net) 来压缩这些模块。在使用 UPX 程序压缩之后,自释放模块的大小将比压缩之前减小 40-50%。

自释放安装模块
自释放安装模块(7zS.sfx 和 7zSD.sfx)可让您创建软件的安装程序。这类模块将释放文件到一临时文件夹,然后运行指定的程序来进行安装。安装之后再自动删除临时文件。要创建自释放档案必须有三个文件:自释放模块、安装程序配置、7z 压缩档案。其中安装程序配置文件是可选的。您可以使用下列命令来创建安装程序:

copy /b 7zS.sfx + config.txt + archive.7z archive.exe

请注意上述文件的输入顺序:*.sfx、*.txt、*.7z。最后的 archive.exe 即为生成的安装程序。

选项 -y 使用在自释放安装模块中可设置释放时是否为安静模式。

安装程序配置文件格式
配置文件包括安装程序的命令行。文件要以字串 ;!@Install@!UTF-8! 开头,以 ;!@InstallEnd@! 结尾。且文件必须使用 UTF-8 编码。文件中还需包含下列变量:

ID_String="Value"

ID_String 说明
Title 对话框信息标题。
BeginPrompt 安装前提示信息。
RunProgram 欲执行命令。若添加子命令 %%T 则会把文件释放到系统的临时目录。

您可以省略上述任何一部分。

配置文件示例
;!@Install@!UTF-8!
Title="7-Zip 1.00"
BeginPrompt="应用程序将安装 7-Zip 1.00,是否继续?"
RunProgram="Setup.exe /T:%%T"
;!@InstallEnd@!

程序将以 BeginPrompt 中的信息提示用户,再执行 RunProgram 中的命令。然后程序将使用 .inf 文件的内容并调用压缩包中的 advpack.dll 文件进行安装。

//////压缩
Dim Rarexe As String = Server.MapPath("winrar\winrar") 'WINRAR执行文件的位置
Dim Source As String = Server.MapPath("TestXml.xml") ' 压缩前的原始文件
Dim Target As String = Server.MapPath("TestXml.ZIP") ' 压缩后的目标文件
Dim FileString As String = Rarexe & " a " & Target & " " & Source 'Shell指令中的字符串
Dim Result As Long
Result = Shell(FileString, vbHide)
////解压
Dim Rarexe As String = Server.MapPath("winrar\winrar") 'WINRAR执行文件的位置
Dim Source As String = Server.MapPath("TestXml.ZIP") ' 解压缩前的原始文件
Dim Target As String = Server.MapPath("TestXml.xml") ' 解压缩后的目标文件
Dim FileString As String = Rarexe & " a " & Target & " " & Source 'Shell指令中的字符串
Dim Result As Long
Result = Shell(FileString, vbHide)

我还以为是winzip 7.0呢
那个是自带的可以指定解压后自动执行某个文件

不能吧 你既然知道哪个WINRAR能做到 换个不就得了..

干吗不用winrar,人家能做到啊

热点新闻