创建 7-zip 安装程序包时出错
Posted
技术标签:
【中文标题】创建 7-zip 安装程序包时出错【英文标题】:Error Creating a 7-zip installer package 【发布时间】:2018-08-08 23:46:25 【问题描述】:如果这不是问这个问题的正确地方,我深表歉意。
我使用 7zip 创建一个安装程序包。最近,我的电脑更新了,我不能再让它工作了。我使用 Visual Studio 2010 中的 Windows Installer 创建安装包,并将其添加到名为 setup.7z 的文件中。我已确认文件已正确存档。然后我打电话给
copy /b 7zsd.sfx + config.txt + setup.7z setup.exe
它将所有内容打包到一个名为“setup.exe
”的文件中。单击此按钮将启动安装程序。
更新后,我仍然可以制作文件,而且看起来还不错。但是,如果我尝试点击它,我会收到一条消息说7-Zip: Unsupported method.
我安装了 7-Zip 版本 18.05 (x86)。老实说,我不确定我从哪里得到7zsd.sfx
文件,但请记住必须找到它。它没有版本控制,但最后一次修改是在 2007 年 7 月 13 日。我不知道版本是否重要,因为您不需要安装 7-Zip,因为这是一个自解压文件。但是,可能是旧版本无法解压缩新版本压缩的内容。
【问题讨论】:
This should solve your issue. 【参考方案1】:我认为问题在于使用的 7zip 和 7zip.sfx 的不同版本。不幸的是,最新的 7zip 包中没有 SFX 文件。 这是 link 到 7zip_extra 的一些旧版本,它同时具有 SFX 文件和 .bat 文件来创建安装程序。 适合我。
【讨论】:
【参考方案2】:设置工具:为什么选择 7-Zip?创建(真实)设置的替代方法有很多——其中一些是免费的:How to create windows installer(用于创建各种设置的工具的几个链接)。以下还有简要说明 - 在“Alternatives
”(免费工具或具有免费功能的工具)下。这些工具已经过广泛测试,以确保以最小的依赖性运行。我猜只是需要记住和评估的事情。
7-Zip
猜测:首先安装C/ C++ runtimes,看看问题是否消失。接下来检查压缩 - 然后是 LZMA SDK 如下所述?
不支持压缩?:7-Zip: Unsupported method - use LZMA? 我想这个问题仍然可能出现,尽管这个答案已经有几年了。
缺少运行时?:您可能还想对 setup.exe
进行dependency walker 检查,看看它是否依赖于盒子上缺少的东西(例如MSVCRT.dll
- 或另一个运行时库)。只需下载该工具。便于使用。或者也许首先尝试install commonly used C/C++ runtimes
。此外,Dependency Walker 正在老化并且有时会显示垃圾。有更新的Dependencies - 但它还不是黄金时间,但试试看(点击Releases
标签)。它已更新为处理 Windows API-sets and WinSxS(并行程序集)。 注意:virustotal.com 上的几个安全软件将依赖项检测为“风险工具,而不是病毒”(它是开源的)。
LZMA SDK:7zSD.sfx
文件可能来自LZMA SDK。您描述的命令行可以在主要的 7-Zip 帮助文件中找到(不是 SDK,而是常规 7-zip 安装附带的那个)。部分"-sfx (Create SFX archive) switch"
:Command Line Version => Switches => -sfc (Create SFX Archive
。
替代方案
Visual Studio 2017:Visual Studio 的最新免费版本:Visual Studio Community 2017 可以通过其 Microsoft Visual Studio 2017 Installer Projects 创建 setup.exe
文件(此扩展必须安装安装 Visual Studio 2017 后)。
WiX:开源WiX toolkit 可以使用其刻录组件创建setup.exe
文件。 A WiX Burn ad-hoc sample- 只是为了了解总体思路- 它有一个学习曲线。没有 GUI 可以帮助您,它都是基于 XML 的。使用或不使用 Visual Studio。
高级安装程序:我相信Advanced Installer 可以编译出setup.exe
,即使是在他们的免费版本中。尽管下载量有点大,但我认为这对您有用并且速度很快。
高级安装程序更新:免费版只能构建 MSI 文件,EXE 引导程序可以使用付费版(任何一个)构建。
dotNetInstaller:还有dotNetInstaller Setup Bootstrapper - 我从未使用过。 Here it is on github.com(来源)。
Inno
或NSIS
:这些免费的non-MSI installers 可以轻松为您创建一个setup.exe
针对最小依赖性进行了优化。我用的不多,但它们 是众所周知的。 NSIS 似乎创建了与 Zip 工具兼容的存档文件。
IExpress 等:security vulnerabilities 会影响这些自解压包。我推荐使用具有专用资源的“真实”部署工具来快速修复此类问题的另一个原因,尽管拥有可以直接在 7-zip 中打开的 setup.exe
很不错。
文件提取
关于从setup.exe
各种类型的文件中提取文件:
setup.exe
文件
NSIS 和 Inno:看起来 NSIS 创建的文件与 7-Zip(可理解压缩)兼容,而 Inno 看起来并非如此。
一些链接:
Wix and .NET Framework (prerequisites) What is the difference between 7zip's 7z.sfx and 7zsd.sfx?https://en.wikipedia.org/wiki/Self-extracting_archive#Overview : "为了让解压实用程序正确地展开 自提取或标准品种,它必须能够操作 使用的文件格式和算法。 确切的可执行代码 因此,放置在自解压档案的开头可能 需要根据用于创建 存档。 LZMA 7z 的解压程序会有所不同 例如,与 LZMA2 7z 存档相比时存档。"
【讨论】:
感谢您的详细回复。我们公司有几个产品已经设置为使用 Windows Installer。实际上,我必须安装多个版本的 VS,以便构建这些较旧的安装程序。我们不想花时间将所有这些更新到新的安装程序,然后重新测试签名和服务以确保它们安装正确。我们较新的软件确实使用了更好的构建解决方案,但我们只有一个许可证,我无权访问该系统。不过,谢谢您的回答。 好的,MSI 安装程序是标准化的,所以这是个好消息——如果您需要迁移它们。你使用 Visual Studio Installer Projects 那么呢?至少在 2017 年,您应该能够直接编译setup.exe
。但是,这些项目有严重的限制 - 正如您无疑知道的那样 - 如果您找到有 WiX 经验的人,使用 dark.exe
反编译并使用 WiX 重新创建可能会相当快。没有什么是一帆风顺的,但它最终可能会为您省去麻烦。只是大声思考。以上是关于创建 7-zip 安装程序包时出错的主要内容,如果未能解决你的问题,请参考以下文章