从7压缩自解压存档(SFX)存档中提取文件后,是否可以执行文件?


40

我正在尝试制作一个压缩的可部署应用程序。

目前,我正在使用从IDE(Visual Studio 2008-WPF发布的应用程序)发布的一组文件,并将其压缩到7-Zip SFX存档中。

我的用户问他们是否可以从7-Zip exe中“一键安装”。创建档案时有一个参数列表。有没有一种方法可以设置某种参数组合来调用提取的安装程序可执行文件?

不幸的是7-Zip文档似乎没有涵盖这种情况。我已经看到了一些付费应用程序,它们执行的操作与此类似,但是我试图使我编写的工具不受许可代码的影响,以便我们可以在内部使用它。


你能指出一些付费的吗?
abhishek77

Answers:


35

您需要从7-Zip下载LMZA SDK。“ installer.txt”文件包含文档:

7zSD.sfx是用于安装程序的SFX模块。7zSD.sfx使用msvcrt.dll。

用于安装程序的SFX模块允许创建安装程序。该模块将存档提取到temp文件夹,然后运行指定的程序,并在程序完成后删除临时文件。安装程序的自解压归档文件必须以3个文件的形式创建:SFX_Module,Installer_Config,7z_Archive。Installer_Config是可选文件。您可以使用以下命令来创建安装程序自解压存档:

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

您需要创建一个config.txt文件。

配置文件包含安装程序的命令。文件从字符串开始 ;!@Install@!UTF-8!,以结尾;!@InstallEnd@!。文件必须以UTF-8编码编写。文件包含字符串对:

ID_String =“值”

Title 消息标题

BeginPrompt 开始提示消息

Progress值可以是“是”或“否”。默认值为“是”。

RunProgram执行命令。默认值为“ setup.exe”。子字符串%% T将替换为提取文件的临时文件夹的路径

Directory“ RunProgram”的目录前缀。默认值为“。\”

ExecuteFile 执行文件名称

ExecuteParameters “ ExecuteFile”的参数

例如:

 ;!@Install@!UTF-8!
 Title="7-Zip 4.00"
 BeginPrompt="Do you want to install the 7-Zip 4.00?"
 RunProgram="setup.exe"
 ;!@InstallEnd@!

1
是。我试过了 有点不舒服,因为一切都是命令行,但是您会找到很好的文档。而且我可以免费获得最佳压缩率。
Ganesh R.

@MikeG-该链接要彻底得多。它说明了如何使减压部分完全透明。非常好-谢谢!
namuol 2013年

5
请注意,从9.35 beta版开始,“ SFX模块已移至LZMA SDK软件包”(可在7-zip.org找到)。
卢卡斯2015年

21

商定的解决方案是正确的,但实际上并不能帮助您解释实际需要执行的操作!我阅读了此说明以及许多其他解决方案,但找不到关于如何执行此操作的完整和完整的简单说明。

如果您像以前一样感到困惑,请阅读我的博客文章,其中提供了有关如何实现Molly7244所发布内容的逐步说明。

如何制作使用7zip -sfx开关运行setup.exe的自解压存档

引起我注意的是,链接可能会失效,因此,这是我博客中的步骤

第1步-设置安装文件夹

为了简化此操作,请创建一个文件夹c:\ Install。这是我们将复制所有必需文件的地方。

第2步-7压缩安装程序

  1. 转到包含.msi和setup.exe的文件夹
  2. 同时选择.msi和setup.exe
  3. 右键单击并选择7Zip->“添加到存档”
  4. 将归档文件命名为“ Installer.7z”(或您选择的名称)
  5. 点击确定
  6. 您现在应该具有“ Installer.7z”。
  7. 将此.7z文件复制到c:\ Install目录

步骤3-获取7z-Extra sfx扩展模块

您需要下载7z-Extra。

  1. 点击此链接下载7Zip
  2. 您需要下载9.20版本(截止日期为2015年5月),因为该Beta版不包含正确的文件。
  3. 一个直接的下载链接。
  4. 提取7zip额外文件
  5. 将文件“ 7zS.sfx”复制到c:\ Install

第4步-设置您的config.txt

我建议使用NotePad ++编辑此文本文件,因为您需要使用UTF-8进行编码,以下说明使用的是notepad ++。

  1. 使用Windows资源管理器转到c:\ Install
  2. 右键单击并选择“新建文本文件”,并将其命名为config.txt
  3. 右键单击并选择“使用NotePad ++编辑
  4. 点击“编码菜单”,然后选择“以UTF-8编码”
  5. 输入如下内容:

    ;!@Install@!UTF-8!
    Title="SOFTWARE v1.0.0.0"
    BeginPrompt="Do you want to install SOFTWARE v1.0.0.0?"
    RunProgram="setup.exe"
    ;!@InstallEnd@!
    

编辑此名称,用您的产品名称替换[SOFTWARE v1.0.0.0]。有关安装文件的参数和选项的注释在此处

检查点

现在,您应该拥有一个包含以下3个文件的文件夹“ c:\ Install”:

  1. 安装程序7z
  2. 7zS.fx
  3. config.txt

第5步-创建档案

这些说明是我在网上找到的,但没有任何地方可以解释上述4个步骤中的任何一个。

  1. 打开一个cmd窗口,Window + R-> cmd->按Enter
  2. 在命令窗口中键入以下内容

    cd \
    cd Install
    copy /b 7zS.sfx + config.txt + Installer.7z MyInstaller.exe
    
  3. 在c:\ Install中查找,现在您将看到一个MyInstaller.exe

  4. 你完蛋了

运行安装程序

双击MyInstaller.exe,它将提示您输入消息。单击“确定”,setup.exe将运行。

PS关于自动化的说明

现在,您已经在c:\ Install目录中进行了操作,我将创建一个“ Install.bat”文件并将复制脚本放入其中。

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

现在,您每次需要重建新版本的部署程序包时,只需编辑并运行Install.bat。


2
这应该是公认的答案!
noelicus '16

是否可以将命令行arg传递给中的ExecuteParameters项目config.txt?例如:C:\Install\MyInstaller.exe some_file.txt 将执行setup.exe some_file.txt
dthor

是的。正如matthew-lundberg在回答中所说:“传递给SFX可执行文件的参数将传递给Install.cmd脚本”
dthor

8

您还应该查看NSIS。使用它,您可以创建一个安装程序,该安装程序的压缩方式与7-Zip使用的压缩方式(LZMA)相同,因此它的大小应该大致相同,并且可以完全控制安装过程。


2

以jcrawfor74的答案为基础,以下是一些其他信息:

除了7zS.sfx,您还可以使用文件7zS2.sfx。这是一个较小的版本(28 kB和140 kB),但不支持config.txt文件。因此,您只需将其保留在复制命令中即可。如果只想创建微小的配置脚本,则可以构建较小的EXE文件。

较小的SFX模块不询问任何问题。它将文件提取到另一个模块的临时文件夹中,然后找到可执行的候选文件。根据源代码(也可在下载页面上找到),在C \ Util \ SfxSetup \ SfxSetup.c中,它根据文件名和扩展名对文件进行加权,然后选择得分最高的文件。

至少在Windows 10中,两个SFX模块都自动以Administrator身份运行,并且无法对其进行配置。尽管此行为对于系统范围的设置可能是理想的,但并非总是如此。另外,此决定仅基于文件版本数据,因为其中没有包含显式告诉Windows怎么做的清单。Windows兼容性会查看该文件,并找到导致“提升”提示的字符串如“ Setup”。

如果您需要一个不要求管理员权限的SFX模块,则可以从源代码重建SFX模块,或更简单的方法是,使用像这样的资源编辑器来编辑其文件版本信息。在提到的Resource Hacker的情况下,只需从FileDescription字段中删除单词“ Setup”即可编译该文件,然后保存EXE文件。您也可以直接在7zS.sfx或7zS2.sfx文件上执行此步骤,并将其保存在某个位置,以便可以使用它来构建非高架SFX软件包。您可以使用它来完全自定义文件版本信息,以在其中输入产品名称或任何描述有效负载的内容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.