这就是软件安装程序在Windows,macOS和Linux上的工作方式

现代操作系统为您提供了设置新应用程序的简便方法。其中包括自动安装程序包以及可同时安装许多软件的命令。但是,当您运行该安装程序或发出该命令时实际上会发生什么呢?

让我们看看如何在三个主要的桌面平台上安装软件:Windows,macOS和Linux。

软件安装方法

有几种方法可以使新应用程序在计算机上运行。为了增加复杂性,这些包括:

  • 软件编译-从源代码构建应用程序。
  • 软件档案 –仅适用于技术含量最高的用户。解压缩档案(例如ZIP文件)并在提取程序的任何位置运行该程序。这可能需要一些额外的调整。
  • 安装程序包-查找安装程序文件,并(双击)开始安装。
  • 软件经理/商店-从一个不错的界面中选择应用程序,然后单击一个大的“安装"按钮。太神奇了!
  • 在本文中,我们将研究安装程序包,因为大多数软件经理/商店最终都会在后台处理这些类型的包。对于当今的主要台式机平台(Windows,macOS和Linux),我们将研究构成这些软件包之一的原因以及安装它们时的情况。

    Microsoft Windows

    Windows可能会遇到的Installer软件包有两种主要版本之一。可执行文件(EXE)可以通过将文件放置在正确的位置并执行Windows Registry更新来完成您的程序的设置。 Windows Installer软件包(MSI)通过提供诸如卸载之类的标准化服务来添加到此软件包中。

    您可以通过使用7-Zip打开档案来检查EXE或MSI的内容。如果使用它查看7-Zip自己的EXE安装程序,则会在以下位置找到许多不同的文件:

    尽管这些文件在安装程序中没有包含文件夹,但开发人员会指出每个一个在目标目录。它们中的大多数最终都位于“默认安装位置" —与您通常在“ C:\ Program Files \ [程序名称]"或“ C:\ Program Files(x86)\ [您的新应用程序"等文件夹中看到的建议相同]。

    使用InstallShield之类的复杂工具创建安装程序包时,应用程序开发人员可以自定义安装。例如,他们可以指定它将安装在Windows上的Windows版本,设置要在``开始''菜单和/或桌面上创建的快捷方式,或者收集用户信息,例如名称,地址等。下图显示了用于设置是否创建或更新Windows注册表项的屏幕。

    使用InstallShield,应用文件和其他自定义文件将打包在 setup.exe 中文件。使用7-Zip打开它会显示里面是一个MSI软件包,运行时看起来就像我们都习惯的安装一样。让我们回顾一下在此过程中发生的情况。

    安装程序将按照以下步骤设置您的应用以供使用(其确切顺序可能会因开发人员的自定义而异):

  • 安装程序可以包含其他存档,例如上述MSI或CAB之类的格式。第一步,安装程序会将它们提取到一个临时位置。
  • 接下来,它将检查以确保已设置的任何依赖项均可用。如果缺少任何内容,它将在可能的情况下下载它,或者如果没有出现错误,则退出安装程序。
  • 如果需要任何依赖项,则将首先使用其随附的任何安装程序进行安装(安装过程会中断)
  • 下一步,安装程序将开始复制应用程序的文件并将其放置在正确的位置。
  • If the developer configured any shortcuts, the installer will create and point them to the actual installation path (remember, you can change this when the installer is run).
  • 更改Windows注册表(如果有)
  • 最后,安装程序可能会提示用户输入信息,例如名称或网站地址。
  • 与列表中的下一个操作系统相比,此过程可能看起来很复杂。 。让我们看一下在macOS上安装软件。

    Apple macOS

    Windows安装程序在后台进行了很多工作。但是,如果您使用的是Mac,则知道安装应用程序通常与下载应用程序副本,打开磁盘映像(DMG)并遵循一些简单提示一样容易。有时下载内容甚至会为您提供一个“在此处拖动!"图标。

    让我们深入研究APP捆绑包以及与之对应的PKG安装程序。

    表面上的APP文件实际上,要比Windows简单,主要有两个原因。首先,它是一个标准文件夹。唯一的区别是它以“ .APP"后缀结尾。如果您在Windows上下载其中之一,则会看到它显示的方式与资源管理器中的其他任何文件夹相同。其次,APP文件要求绝对包含程序需要的所有内容。不必担心会丢失这些类型的安装程序的依赖关系。

    这些捆绑软件必须在名为“目录"的文件夹中包含三样东西:1)一个“ Info.plist"文件,其中包含应用程序元数据,例如名称,语言,版本号等; 2)包含主要可执行文件的“ MacOS"目录; 3)“资源"目录,其中包含应用程序需要运行的资产(例如,应用程序图标)。还有其他可选文件夹,例如“ Frameworks"(并非特定于应用程序的功能包),“ Plug-Ins"(无需运行应用程序的功能)和“ SharedSupport"(外部数据如

    相反,PKG格式是类似Windows的安装程序和类似Unix结构的组合。 7-Zip应用程序还将打开一个PKG文件,该文件以 xar 格式压缩。其中有一个或多个有效载荷文件,它也是一个存档。要提取其内容,请在Mac或Linux终端中使用以下命令链( cpio 是存档格式以及用于处理它们的程序):

    cat Payload | gunzip -dc | cpio -i

    您会看到熟悉的类Unix目录树。

    在下面的示例中,我使用了文档转换器Pandoc。它在 / usr / local / bin 中包含一个二进制文件,在 / usr / local / share / man 中包含一些文档。这些事情实际上是如何实现的?我们将研究其中的每一个实际上如何安装到您的Mac。

    我已经使用Windows版本的7-Zip进行了说明,而不是仅使用命令行的Linux版本。

    将那个APP文件放到Applications文件夹中时,它并没有真正改变太多。记住,运行程序所需的一切都是独立的。与标准拖放操作的唯一区别是“ Info.plist"文件已在系统中注册。

    This will configure things such as which executable is called when you start the app, which icon is displayed, file types it supports, and more. But otherwise your app (such as the APP package for the Atom Editor shown below) is now ready to use.

    相反,打开PKG文件会启动“向导样式"安装程序。对于简单程序,通常是组件安装程序,通常需要执行以下步骤:

  • 运行 preinstall 脚本。
  • 运行 postinstall 脚本。
  • 开发人员可以将多个组件组合为一个产品存档安装。这会添加一些选项,例如显示供用户接受的EULA,从用户收集信息以及选择要安装的组件。同时,Apple Installer负责在后台一对一安装必要组件的所有细节。

    谈到基于Unix的安装程序,我们将继续介绍两个领先的Linux软件包。

    Ubuntu和Fedora Linux

    Ah,DEB与RPM进行比较。伟大的火焰大战之一,仅由 vi emacs 或KDE与GNOME之类的武器打败。然而,这些格式比不同之处更相似。让我们看一下。

    要看一下DEB文件的内部,可以尝试使用GUI存档管理器。否则,请使用 ar 命令。在终端中输入以下命令将提取Debian软件包的内容:

    ar -x name-of-your-package.deb

    将出现三个文件:

  • control.tar.gz —依次包含一个主文件 Control ,该文件包含有关程序包的元数据,例如其正式名称,版本和相关性。它还可能包含其他文件,例如将在安装过程中运行的脚本或默认配置文件。
  • data.tar.gz -组成应用程序本身的文件是在此TAR.GZ档案中。一切,包括二进制文件,文档和默认配置都在这里。在示例程序包kde-service-menu-encfs_0.5.2_all.deb中,它包含文件和目录,如下图所示。
  • debian-binary –这是一个定义文件使用的Debian软件包格式的版本的文件。对于现代发行版,它仅在一行中包含“ 2.0"。
  • 在Fedora中,您可以使用 rpm2cpio cpio 命令来提取一个RPM软件包并浏览其文件:

    rpm2cpio name-of-your-package.rpm | cpio -idvm

    对于kde-cli-tools-5.9.4-2.fc26.x86_64.rpm软件包,您将看到类似于DEB软件包的文件树。但是它不提供元数据,至少没有提供 binary 包中的元数据。您需要下载与您的二进制版本相对应的源RPM(.SRC.RPM),然后对该文件使用上面的相同命令。其中将包含一个SPEC文件,该文件包含与Debian软件包中 Control 文件相同的许多项目。

    现在,我们已经了解了Linux软件包的结构。 ,让我们探讨一下当您实际安装它们时会发生什么。

    安装任何一种格式的软件包时,无论前端如何,都会发生类似的步骤:

  • 软件包系统检查软件包的内容以确定是否缺少依赖项。视工具而定,它会警告您或设置为下载它们。
  • 如果软件包包含预安装的脚本或命令,则它们将在下一步运行。
  • 然后,软件包系统实际上提取软件包的文件。
  • 安装好文件后,运行安装后脚本。
  • 最后,使用元数据将软件包注册到内部数据库中,以便将其卸载
  • 知道如何安装软件是件好事

    因为操作系统的开发人员和运行在它们上的软件在简化软件安装方面做得很好,所以您不会确实需要注意细节。但是,了解有关幕后发生的信息将使您对系统上正在安装的内容有所放心,并帮助您进行故障排除。

    上面安装了多少软件方法完成了吗?您喜欢DEB还是RPM?还是Mac的APP捆绑包代表易用性的巅峰?曾经做过噩梦吗?在下面的评论中让我们知道!

    标签: 安装软件 Linux macOS Sierra Windows