SFX的妙用——如何在不安装软件的情况下打开自定义格式文件?

这篇具有很好参考价值的文章主要介绍了SFX的妙用——如何在不安装软件的情况下打开自定义格式文件?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前段时间看到群友讨论压缩包能不能运行,想起了n年前用自解压文件SFX实现的一个“需求”:在没有安装任何应用软件的Windows(当时还要支持XP)上能双击打开自定义格式的文件。当时第一反应是这“需求”太奇葩了,简直是不可能。但思考后认为这个“需求”存在一定的合理性,因为当时的目标用户群体并不能熟练使用电脑,可能不知道打开一个文件需要安装对应的软件。

这里“需求”之所以打上引号,是因为我觉得这不是真正的需求,而是一个解决方案,真正的需求是如何让不熟悉电脑操作的用户方便的使用我们自定义格式的文件。

实施方案

Windows系统的注册表中会记录文件格式与对应软件的关联关系,双击文件时会找到关联的软件运行并加载文件。而这个文件与软件的关联信息是在安装应用程序时写进注册表的。正因如此,一开始觉得“需求”简直是不可能的。经过一番思考,尝试把自定义格式的文件和应用程序打包到一起形成一个exe,双击exe时释放应用程序和文件,并运行应用程序加载文件。具体到实施上有两种选择:用NSIS或者MSI打包工具生成安装包,用压缩软件制作SFX自解压文件。考虑到第一种方式依赖项较多且代码调用不方便,最后选择了自解压文件的方式。

自解压文件

自解压SFX(self extracting)文件是压缩文件的一种,其后缀名是exe。它可以不借助任何压缩工具,只需双击该文件就可以自动执行解压,并根据配置执行解压后的可执行程序(EXE)。WinRAR和7-Zip都可以制作自解压文件。这里以7-Zip为例介绍如何制作自解压文件。自解压安装包必须包含三个文件:7z_Archive,SFX_Module, Installer_Config。

  • 7z_Archive:用7z打包归档好的文件(希望放到自解压文件中的程序和文件)
  • SFX_Module:自解压文件的核心模块,必须与7z.exe放在同一目录,主要包含四种类型:
SFX_Module 说明
7z.sfx 带有GUI的自解压模块
7zCon.sfx 提供Console窗口交互的自解压模块
7zS.sfx 允许创建安装程序的带GUI的自解压模块
7zSD.sfx 允许创建安装程序的带GUI的自解压模块(使用MSVCRT.dll)

7z.sfx7zCon.sfx在7-Zip的安装目录中能找到,这两个基本上没什么用,仅仅是完成双击自解压功能,解压完成之后没有任何操作,即便是在Installer_Config配置文件中指定了需要执行的程序也没作用。以下两个图分别是7z.sfx7zCon.sfx制作的自解压文件解压过程。
SFX的妙用——如何在不安装软件的情况下打开自定义格式文件?
SFX的妙用——如何在不安装软件的情况下打开自定义格式文件?

7zS.sfx7zSD.sfx则需要从官网下载 LZMA SDK包获取。这两个制作的自解压文件会把打包的文件释放到用户的临时目录,然后根据Installer_Config配置文件执行指定程序,程序结束后会删除临时文件。制作自解压文件的命令如下:

copy /b 7zS.sfx + config.txt + archive.7z archive.exe
  • Installer_Config:这个配置文件包含了自解压文件对话框的标题,信息,解压完成后执行的文件和参数等信息。文件以;!@Install@!UTF-8!开始,并以;!@InstallEnd@!结束,且必须是用UTF-8编码。具体包含的配置信息内容参见7-Zip的帮助文档,以下是配置文件的示例:
;!@Install@!UTF-8!
Title="7-Zip 4.00"
BeginPrompt="自解压文件测试,是否继续?"
RunProgram="7zFM.exe"
;!@InstallEnd@!

下图是7zS.sfx配置了制作的自解压文件解压过程。虽然实现了双击自解压后运行指定的7zFM.exe,但是自解压文件的图标、文件说明、公司信息等文件属性不是我们想要的,并且解压过程的对话框样式和内容也不符合预期。接下来需要美化自解压文件。
SFX的妙用——如何在不安装软件的情况下打开自定义格式文件?

美化自解压文件

7z自带的sfx以及帮助文档提供的信息有限,可以通过7z SFX Builder实现更多的自定义操作。下载安装后可以用图形界面的方式自定义解压过程对话框的样式,并生成相应的Installer_Config信息。首先设置解压文件覆盖模式和对话框样式。
SFX的妙用——如何在不安装软件的情况下打开自定义格式文件?

然后根据实际情况选择对话框具体的样式信息。
SFX的妙用——如何在不安装软件的情况下打开自定义格式文件?

接下来就是设置对话框的标题、解压进度窗体、错误窗体、警告窗体的标题信息。
SFX的妙用——如何在不安装软件的情况下打开自定义格式文件?

设置完标题信息后就是设置对话框内的各种信息内容。
SFX的妙用——如何在不安装软件的情况下打开自定义格式文件?

再然后就是配置解压后执行文件以及参数信息。
SFX的妙用——如何在不安装软件的情况下打开自定义格式文件?

配置完这些信息之后,可以在“output”下看到Installer_Config信息,我们可以复制保存下来以备后用。需要注意的是,Installer_Config配置文件以;!@InstallEnd@!结束,从“output”中复制信息时,;!@InstallEnd@!后边还有内容就不要复制了。
SFX的妙用——如何在不安装软件的情况下打开自定义格式文件?

7z SFX Builder也提供了更多的sfx模块供选择,这些模块保存在C:\Program Files (x86)\7z SFX Builder\3rdParty\Modules目录下,
SFX的妙用——如何在不安装软件的情况下打开自定义格式文件?

选择了sfx模块后可以设置文件说明、公司信息等属性。这也决定了最终制作的自解压文件的文件属性。
SFX的妙用——如何在不安装软件的情况下打开自定义格式文件?

到了这里,我们离大功告成只剩下修改图标这一步了。这时需要借助Resource Hacker来修改图标信息,如果上一步中没有编辑sfx模块的信息,也可以在这里通过Resource Hacker修改。我们只需准备好ico文件,然后在Resource Hacker打开sfx模块,并替换图标文件或编辑版本信息,完成后保存sfx模块文件。至此就完成了自解压文件的美化工作。
SFX的妙用——如何在不安装软件的情况下打开自定义格式文件?

小结

文中只介绍了7z SFX Builder的基本用法,它的帮助文档提供了更多的操作说明以及示例。
自解压文件在某些特定的场景给我们提供了便利,但也容易被杀毒软件当成病毒处理。我在实现开篇提到的“需求”时,也饱受杀毒软件困扰。最后分享几点经验:文章来源地址https://www.toymoban.com/news/detail-749005.html

  1. 对自解压文件中的可执行程序及依赖文件进行code review,删除所有未使用过的变量和属性;
  2. 避免在系统目录写文件和修改系统文件,避免写注册表等操作
  3. 对可执行程序以及所有依赖的类库进行强签名;
  4. 提交常用杀毒软件白名单;
  5. 最后一点,也是最重要的一点。前边几点只能缓解杀毒软件误报,要想彻底解决,就不要在生产环境使用自解压文件。

到了这里,关于SFX的妙用——如何在不安装软件的情况下打开自定义格式文件?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何在不带备份的情况下恢复 Android 手机照片?

    你的 Android 手机出了什么问题? Android 手机上的垃圾文件过多。 您的 Android 手机屏幕黑屏。 您的手机蓝屏死机。 您的设备卡在启动屏幕上。 电话停止工作。 手机一直关机。 ... 您是否遇到过以上情况并将您的 Android 手机恢复出厂设置?如果是这样,您可能会发现您的手机数

    2024年04月09日
    浏览(89)
  • [ Azure - VM ] 如何在不删除配置的情况下重新部署VM虚拟机

    本文会介绍在Azure cloud中如何进行重新部署虚拟机。 一般可以解决:连接虚拟机出现问题、VM出现卡在失败状态等疑难杂症。 重新部署 VM 时,Azure 将关闭虚拟机, 将 VM 移动到 Azure 基础结构中的新节点 ,然后重新启用它,同时 保留所有配置选项和相关资源 。 注意:重新部

    2024年02月06日
    浏览(81)
  • 如何在不使用脚本和插件的情况下手动删除 3Ds Max 中的病毒?

    如何加快3D项目的渲染速度? 3D项目渲染慢、渲染卡顿、渲染崩溃, 本地硬件配置不够,想要加速渲染,在不增加额外的硬件成本投入的情况下,最好的解决方式是使用 渲云云渲染 ,在云端批量渲染,批量出结果,maya可分块渲染,享受高配置、高内存、高性能服务器带来极

    2024年02月14日
    浏览(46)
  • 如何安全的清理/var 下的docker临时文件,在不停用docker正在运行的容器情况下

    在不停止正在运行的 Docker 容器的情况下清理 `/var` 目录下的临时文件有一定的风险,因为这可能导致正在运行的容器出现问题。然而,你可以尝试以下方法来减小对正在运行的容器的影响: 1. 删除悬空镜像: 悬空镜像是没有与任何容器关联的镜像。你可以运行以下命令来删

    2024年02月09日
    浏览(60)
  • 关于项目移植过程中,如何在不修改java源程序的情况下,如何适应新环境下的mysql

    在我们将这个自己电脑里面写好的web项目部署到这个我们自己的云服务器之前,我们已经部署好了这个相应的环境,jdk,tomcat ,mysql ,如果我们只是将自己的web项目部署到这个tomcat下面的话,这个数据库很可能是连接不是上的, 原因是因为这个原来项目中的数据源的配置信息或

    2024年02月02日
    浏览(40)
  • EasyCVR如何在不修改分辨率的情况下进行H.265自动转码H.264?

    EasyCVR视频融合平台基于云边端一体化架构,可支持多协议、多类型设备接入,在视频能力上,平台可实现视频直播、录像、回放、检索、云存储、告警上报、语音对讲、电子地图、集群、H.265转码、智能分析以及平台级联等。 我们在此前的文章中介绍过关于EasyCVR平台H.265自动

    2024年02月12日
    浏览(51)
  • 如何在不插电源合盖的情况下,让mac book pro连接显示器键盘持续使用

    正经人用windows不会遇到这种困难。 但macbook默认一拔掉电源线,系统就进入休眠了。 简单搜索拿到了一个文章 How to Use MacBook in Clamshell Mode without a Power Adapter 提供两个方案 其中第一个方案一顿操作后无效,可能是因为系统更新到了Ventura。啧啧啧苹果的兼容性。 方案二是命令

    2024年02月15日
    浏览(47)
  • Vivado Error问题之[DRC NSTD-1][DRC UCIO-1] FPGA管脚约束问题导致生成bit时报错,如何在不重新Implentation情况下生成bit?

    [DRC NSTD-1] Unspecified I/O Standard: 1 out of 9 logical ports use I/O standard (IOSTANDARD) value \\\'DEFAULT\\\', instead of a user assigned specific value.  This may cause I/O contention or incompatibility with the board power or connectivity affecting performance, signal integrity or in extreme cases cause damage to the device or the components to which it i

    2024年01月19日
    浏览(58)
  • JPA在不写sql的情况下实现模糊查询

    本文已收录于专栏 《Java》   在我们的项目中很多的业务都会设计模糊查询,例如按照姓氏去获取人员的信息,按照手机号的前三位去获取人员的信息等。我们除了正常的手写模糊查询的sql语句去获取信息之外,还可以使用JPA自带的API来实现任意字段的模糊查询。JPA已经给

    2024年02月10日
    浏览(46)
  • Elasticsearch:在不停机的情况下优化 Elasticsearch Reindex

    实现零停机、高效率和成功迁移更新的指南。更多阅读:Elasticsearch:如何轻松安全地对实时 Elasticsearch 索引 reindex 你的数据。 在使用 Elasticsearch 的时候,总会有需要修改索引映射的时候,遇到这种情况,我们只能做 _reindex。 事实上,这是一项相当昂贵的操作,因为根据数据

    2024年02月04日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包