从 7-Zip 自解压档案 (SFX) 中提取文件后可以执行文件吗?

从 7-Zip 自解压档案 (SFX) 中提取文件后可以执行文件吗?

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

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

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

不幸的是,7-Zip 文档似乎没有涵盖这种情况。我见过几个付费应用程序做类似的事情,但我试图让我编写的工具不包含授权代码,以便我们可以在内部使用它。

答案1

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

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

安装程序的自解压模块允许创建安装程序。此类模块将存档提取到临时文件夹,然后运行指定的程序并在程序完成后删除临时文件。安装程序的自解压存档必须由 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@!

答案2

商定的解决方案是正确的,但它实际上无助于解释您真正需要做什么!我读过这个和许多其他解决方案,但我找不到关于如何做到这一点的完整而简单的说明。

如果您和我一样感到困惑,请阅读我的博客文章,其中提供了有关如何实现 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 SDK 获取 7z-Extra sfx 扩展模块

您需要下载 7z SDK

  1. 点击此链接前往下载 7Zip
  2. 您需要下载 19.00 版本(截至 2019 年 12 月),因为测试版不包含正确的文件。
  3. ASDK 下载关联。
  4. 解压缩 7zip SDK 文件。
  5. 将文件“7zSD.sfx”从 SDK 的 bin 目录复制到 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] 替换为您的产品名称。安装文件的参数和选项说明请参见此处

检查点

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

  1. 安装程序.7z
  2. 7zS.sfx
  3. 配置.txt

步骤 5 - 创建档案

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

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

    cd \
    cd Install
    copy /b 7zSD.sfx + config.txt + Installer.7z MyInstaller.exe
    
  3. 查看 c:\Install,你会看到有一个 MyInstaller.exe

  4. 你完蛋了

运行安装程序

双击 MyInstaller.exe,系统会提示您的信息。单击“确定”,setup.exe 将运行。

PS 关于自动化的说明

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

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

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

答案3

你还应该看看奈米科技。使用它,您可以创建一个使用与 7-Zip 相同的方法压缩的安装程序(左心室舒张功能),因此它应该大致相同大小,并且您可以完全控制安装过程。

答案4

这是否支持复制和替换文件(Windows 壁纸)以及将徽标复制到设备上的某个位置的概念?

示例:akeown /fc:\windows\WEB\wallpaper\Windows\img0.jpg takeown /f C:\Windows\Web\4K\Wallpaper\Windows*.* icacls c:\windows\WEB\wallpaper\Windows\img0.jpg /Grant Administrators:(F) icacls C:\Windows\Web\4K\Wallpaper\Windows*.* /Grant Administrators:(F) del c:\windows\WEB\wallpaper\Windows\img0.jpg del /q C:\Windows\Web\4K\Wallpaper\Windows*.* copy "%~dp0img0.jpg" c:\windows\WEB\wallpaper\Windows\img0.jpg copy "%~dp04k*.*" C:\Windows\Web\4K\Wallpaper\Windows

相关内容