如何在不弹出窗口的情况下将7-zip自解压缩存档安装到特定目录?

35

Ruby Devkit是一个基于7-zip的自解压缩归档文件。

我想要无声地调用它,而不必安装7-Zip将文件提取到我选择的文件夹中,以便我可以脚本化安装。 我想象它应该像这样:

cmd> DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe /silent /dir="C:\DevKit"

但是,这当然不起作用。我必须使用哪些命令行标志才能将此存档无声地提取到我选择的文件夹中?

4个回答

47

试一试这个:

C:\> DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe -o"C:\DevKit" -y

1
顺便提一下,如果您想提取到当前工作目录中,在 o 参数中传递“.\DevKit”。 - BuvinJ
有没有一种方法可以等待提取完成?一旦进度对话框出现,命令就会退出。 - Tasos Laskos
6
start /b /wait放在命令前面。 - Kevin
2
我怀疑这取决于存档的制作方式,但例如使用GitHub便携式Git分发7z.exe文件,Jens A Koch的答案比这个更好(使用-InstallPath而不是-o)。 - Will Dean

15

2017更新:来自7zsfx.info的工具已经停止使用。


原始的旧帖子(08-2015):

如果您正在尝试提取一个7zip SFX (http://7zsfx.info/) 归档文件:

sfx.exe -y -gm2 -InstallPath="C:\\your\\target\\path"

开关文档

  • -y 隐藏一些提示
  • -gm2 完全隐藏提取对话框(静默模式)
  • -InstallPath 设置目标路径(您需要双反斜杠)

7z SFX 指南

创建SFX包的官方方法是使用-sfx[{name}]: 创建SFX存档

这意味着创建的SFX包使用两种CLI选项:

  1. 来自7zSFX的官方CLI选项,以及
  2. 在创建软件包之前配置的传递选项。

您可以将其视为参数转发到打包的可执行文件。此参数转发取决于SetEnvironmentRunProgramm配置!

整个过程:

  1. 创建存档Package.7z
    • 包含Installer.msi和附加的crap.cab文件。
  2. 创建配置文件config.txt

  3. ;!@Install@!UTF-8!
    Title="Installation"
    SetEnvironment="strInstall=hidcon:Installer.msi /qn"
    RunProgram="%strInstall%"
    ;!@InstallEnd@!
    
  4. 现在我们通过将 SFX+配置文件+归档文件组合成一个可执行文件来生成 Test.exe

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

    注意:7zS.sfx 来自于官方的 7zip 额外软件包。

  5. 现在,当运行 SfxInstaller.exe 时,你可以传递例如 /lv InstallerLog.txt 来创建一个安装日志,例如:

    SfxInstaller.exe /lv InstallerLog.txt


嗯,有多个7zip SFX构建器。每个构建器都有略微不同的CLI选项。 - 我提到的工具(7zip SFX(http://7zsfx.info/))已经死亡和消失了...我会更新帖子。 - Jens A. Koch
通常这些东西如果你使用/h运行会给你命令行(就像msi一样),但7zip不会。这有点麻烦。 - thang
2
http://7zsfx.info/ 已经失效,请使用 https://olegscherbakov.github.io/7zSFX/。 - Max

1
自从使用7-zip后,只需在.exe中创建一个自解压缩文件,并使用-o和-y开关运行它。
我使用它来节省USB驱动器上的空间。例如,我很少运行VDiskAir应用程序。我创建了一个VDiskAir程序文件夹(大约15MB)的自解压缩归档文件:
7z a -SFX -mx9 VDiskAir.exe [VDiskAir folder path]

注意:这里使用“-mx9”来最大化压缩。
我创建了一个DOS批处理文件来运行自解压的VDiskAir.exe(约5MB),将其保存为VDiskAir.bat,内容如下:
VDiskAir.exe -o%TMP% -y

%TMP%\VDiskAir\VDisk_Air.exe

我不担心在以这种方式运行VDiskAir后,%TMP%中提取的VDiskAir程序文件中的VDiskAir文件夹未被删除,因为我有一个BAT脚本在关机/启动时清除%TMP%。


抱歉,这两行代码被合并到了一行,请将它们拆开: - Hon Kong

0

以下是我用于Autodesk产品的内容:

Start /W %~dp0AutoCAD_2018_French_LP_Win_64bit_dlm.sfx.exe -suppresslaunch -d C:\Autodesk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接