我注意到至少在 Windows 上,您可以下载直接的静态链接的可执行文件并直接启动它,或者编写自己的程序并执行它(甚至是动态的),而无需安装它。
这就引出了我的主要观点……安装过程的目的是什么?我的意思是,除了Windows 注册表。但是,出于实用性和使用目的,可以有一个单独的、独立的、独立的程序,它可以运行、存储在非易失性存储器上,并通过它所在的任何设备的文件系统访问,并在操作系统上执行。那么,如果许多几乎任何规模的优秀程序都可以完美运行而无需经过安装配置,那么所有这些“安装”业务有什么大不了的呢?这让我有点困惑,除了数据库或其他元数据/访问配置系统之外,如果后者(已安装的可执行文件)的性能和工作方式与独立程序相同,那么真正的区别是什么?
我不知道未安装的程序和已安装的程序之间是否存在区别?
PS:这不仅适用于 Windows 操作系统,也适用于任何实现类似功能的操作系统。
答案1
程序以安装程序而不是独立可执行文件的形式出现的原因如下:
文件大小问题
具有大量依赖项的程序可以捆绑基于 Web 的安装程序,这些安装程序会下载依赖项并将其放置在公共位置,以便多个程序可以共享它们。例如,DirectX 是一个非常大的库。如果系统上依赖于 DirectX 的每个程序都将整个 DirectX 运行时与其捆绑在一起,则会占用大量空间。在 4 TB 硬盘时代,这似乎无关紧要,但请考虑 SSD 的容量要小得多,并且它们在超极本上越来越普遍,有些超极本的存储空间只有 64 GB。当然,除了 DirectX 之外,还有许多其他共享库。
大型且不断更新的程序最好以许多小文件的集合形式发布,同时使用启动程序或更新程序检查互联网上的更新,如果有更新,则仅下载所需的更改。如果所有大型程序都以单个单片可执行文件的形式发布,则修补过程很可能需要重新下载整个可执行文件,因为由于文件锁定,修补磁盘上正在运行的可执行文件几乎是不可能的。此外,由于更新程序需要知道其文件的位置,它通常将该目录路径存储在注册表中众所周知的位置。
用户便利性问题
对于非常大的程序(例如 Visual Studio 和 Microsoft Office),如果用户知道他们永远不需要某些功能,安装程序会允许用户取消选择安装这些功能。这有 3 个潜在的好处:减少磁盘空间消耗;如果安装程序是 Web 下载程序,则可以减少下载时间和带宽消耗;并且可以减少用户机器上的“混乱”和“膨胀”,减少开始菜单/桌面快捷方式,减少启动程序等。
复杂程序的安装程序通常带有配置选项,用户可以使用用户友好的图形界面作为安装程序的一部分进行设置。例如,MySQL 或 SQL Server 安装程序,它们可以引导您完成启动和运行数据库服务器的整个过程,甚至在您单击安装程序上的“完成”之前。
安装程序可以提示用户输入所需的信息,例如许可证密钥,这些信息只需输入一次。这可以简化程序本身的设计,并减少它在启动时必须执行和检查的操作数量。这也使用户有信心,一次程序已成功安装,它应该“正常工作” - 程序中不再存在可能阻碍他们使用的“陷阱”。
兼容性问题
某些程序会与其他程序发生冲突。这是软件工程中一个简单而又令人遗憾的事实。在安装已知与其他程序发生冲突的程序之前,首先检查系统是否安装了不兼容的程序通常会有所帮助。如果安装了不兼容的程序,则可以提醒用户。例如,旧版本的 VMware 和 VirtualBox 中存在非常危险的不兼容问题,这会导致蓝屏死机,因为一个程序会尝试使用另一个产品已经为用户保留的特殊虚拟化处理器指令。如果您只是向用户提供最终产品而没有安装程序,则必须检查是否存在不兼容的产品每一个程序的启动,这可能会减慢程序的启动速度。
程序可能依赖于其他系统组件,这些组件只能在系统范围内安装,而不能在每个用户级别安装。为了安装这些特殊的系统组件,通常需要管理员权限,并且通常必须运行安装程序。
提升特权和特殊服务
- 有些程序的功能依赖于对操作系统的更改,如果没有某种安装程序以管理员权限来处理这些更改,这些更改就无法轻松实现。例如,安装驱动程序或内核模块的程序(如 Wireshark)无法简单地运行,因为您必须将内核模式组件放在单独的文件中。在绝对最佳的情况下,您仍然必须让用户手动解压缩存档,然后运行某种设备驱动程序安装程序。服务是需要管理权限才能安装的另一个示例。安装程序软件特别擅长以优雅的方式获取管理员权限,而无需主程序本身在每次运行时请求管理员权限(在许多情况下,这将是不必要的安全风险)。
给出了安装程序有用的所有原因之后,从另一个角度来看,这里有一些观察结果:
许多程序,即使是那些仅以需要管理员权限的安装程序形式下载的程序,也可以从安装程序中强制“解压”并直接运行而无需安装。其他程序,尤其是开源程序,则由便携应用程序.值得注意的是一些程序从安装程序中解压时,其功能会降低、出现错误或出现其他问题。
在 Windows 以外的操作系统上,几乎总是可以简单地下载(或编译)程序并以普通用户身份运行它们,而无需获得 root 权限。对于作为操作系统核心部分的软件包,有一些例外,但对于大多数用户应用程序,您可以在主目录中运行它,而无需使用软件包管理器将其安装在系统范围内。Windows 的情况有点特殊,因为 Windows 上的大多数桌面程序都有安装程序,通常无法通过任何其他方式安装。
即使在非 Windows 平台上,需要加载内核模块的程序也会附带某种安装程序,它会编译内核模块并将其安装在正确的目录中。如果程序是守护进程将使用系统服务脚本启动,例如
/etc/init.d
。这种类型的“压缩二进制文件”是 GNU/Linux 上不太常见的分发方法,但大多数 Linux 发行版仍然以可安装包的形式提供大多数软件,每个软件包都需要 root 访问权限(管理员访问权限)才能安装。
结论
你问我们为什么需要安装程序。简短的回答是我们没有——严格来说不是。很少有应用的例子不能原则上,可以捆绑成一个独立的可执行文件,无需资源、安装程序等。即使像 VMware Workstation 这样复杂的东西也可以自动获取管理员权限,将虚拟机管理程序内核模块写入磁盘上的文件,并在程序启动时动态安装它,并将其所有资源(图像、声音等)捆绑在可执行文件的数据部分内。
是否使用安装程序是一个选择软件生产商必须做出的决定。使用安装程序有优点也有缺点。许多供应商选择分发他们的软件两个都作为安装人员,和作为独立二进制文件,或者至少作为可以简单解压并运行的 ZIP 文件。对于不需要安装程序的软件,这是一种非常实用的方法,可以让每个人都满意。通常,除了安装程序之外不以任何其他形式提供的软件是需要管理权限才能安装其自身某些组件的软件,因为安装程序是获取所需权限的最优雅的方式。
就我个人而言,我发现安装程序在日常工作中非常烦人,因为有时我想运行某个程序,但我没有所用电脑的管理员权限。我有相当多的手动解压安装程序以提取其中的程序文件,然后让这些文件正确运行的经验。然而,在我家里的个人电脑上,我总是有管理员权限,我发现安装程序很有用也很方便,因为大多数安装程序都为我提供了有用的选项,比如是否创建桌面快捷方式,如果没有它,我就必须手动完成这些操作。
答案2
安装过程考虑以下事项:
是否安装了所需的库(api),例如.net framework 版本,或者direct X。
在系统文件夹中安装一些额外的系统 DLL 文件。如果系统文件夹已经包含这些文件(相同版本),则忽略此步骤。这样您就不需要相同 DLL 文件的多个副本。
在您的“开始”菜单或桌面上安装快捷方式,以帮助您快速启动应用程序。
正如你所说,注册表修改。这一步实际上可以在应用程序第一次在这台电脑上执行时完成,因此并不是特别重要。
非常重要:是否将某个软件(例如 Google 桌面工具栏或 Yahoo! 工具栏)捆绑到您的 IE 中。这是许多独立软件为开发者创造收入的方式。如果您使用的是免费软件,请不要忘记这一点。
因为我们正在考虑一个“可执行”的应用程序,所以我们不需要讨论那些可以安装 IE 插件或相关东西的步骤。
答案3
独立程序没有外部依赖。
它不一定只是 .exe 文件,它可以有附带的库和数据文件:将存档解压到文件夹中并运行可执行文件。如果您只是解压存档,则不会在“开始”菜单中添加任何快捷方式,因此您必须导航到解压后的应用程序所在的文件夹并从那里启动它,或者在“开始”菜单中手动为其创建快捷方式。许多计算机用户发现这很困难。
更易于使用
安装程序会引导用户完成安装过程。您可以下载安装程序(.exe 或 .msi,前者更适合非高级用户)并运行它。它会获取安装文件夹(通常在 中)Program Files
,复制文件,在“开始”菜单中创建快捷方式。您已完成:在大多数情况下,您只需单击几次“下一步”即可。
然后进入“开始”菜单并运行该应用程序。有些安装程序提供了安装完成后启动该应用程序的选项。
如果应用程序打开某种类型的文件或文档,安装程序会将其注册到 shell 中。这样您就可以单击该文件来打开它。
许可协议
许多应用程序(包括商业和免费应用程序)都要求您接受许可协议,然后才能使用其应用程序。只有您确认同意许可条款后,安装才会继续。即使您没有阅读许可证,您也已经同意了。
依赖项
有时,仅仅复制可执行文件是不够的。应用程序经常使用共享组件或特殊运行时库。例如,必须安装 .Net 框架运行时才能运行为 .Net 编写的应用程序;甚至 Visual C++ 运行时(如果不是静态链接的)也必须安装。安装程序负责确保满足所有依赖关系。
如果应用程序由多个 .exe 和/或 .dll 文件组成,则动态链接到 Visual C++ 运行时可减少磁盘空间。如果 .exe 和 .dll 是静态链接的,则运行时会在每个文件中重复。
库的许可条款可能不允许静态链接。
安全
如果在运行时中发现漏洞,则可以单独更新它。.Net 和 Visual C++ 运行时的更新将通过 Windows Update 自动安装。
如果可执行文件和库是静态链接的,那么应用程序供应商必须重新编译应用程序并发布更新版本。因此,使用共享运行时可降低开发人员和供应商的应用程序维护成本。
安装Program Files
还可以提供更安全的环境:没有管理员权限就无法修改或删除那里的文件。
註冊
许多 Windows 应用程序依赖于注册表中的条目。如果应用程序使用 COM,则必须注册所有对象,否则应用程序将无法创建所需的对象并且无法启动。
答案4
简要回答:独立的 exe 不需要在计算机上安装任何库即可运行,也不需要注册表项或其他组件。
安装的文件能在安装程序包中是独立的,但通常依赖于与其一起安装的各种组件和库。
在许多情况下,通过通用提取器(非官方更新:这里),您可以提取安装程序的内容并在 Windows 中运行没有管理权限的程序。MSI 安装程序可以使用莱姆西。
在大多数其他操作系统中,所有程序都可以通过用户特定的“bin”、“lib”和主目录中的其他目录运行,而无需 root/管理员权限。就我个人而言,我大多数时候都讨厌安装程序,因为当我没有管理员权限时,它们会使我更难使用没有管理员权限的程序。但大型公司以这种方式打包它们是为了简化普通最终用户的流程。