标准“安装”实际上有什么作用?
-
06-07-2019 - |
题
我或多或少只是一个业余程序员,并且在 .NET ClickOnce 世界中以编码方式长大。
当一个人“安装”一个程序时,实际上会发生什么?!
还:一些小应用程序/工具只是从 exe 运行。为什么大多数程序需要一个奇特的安装过程?优点、缺点、优缺点是什么?安装通常是必要的还是更像标准做法?
对于额外的问题,我们深表歉意。我只是希望有一个简单的英语或多或少的外行人对关键因素的解释。
解决方案
您确实看到了许多遗留原因,这些原因都已成为 Windows 世界的标准实践。
首先,进行一些对比,因为情况并不总是如此。Mac OS X 中的“应用程序”只是一个内部具有特定结构的目录,以 .app
扩大。安装应用程序就像将其(仅应用程序图标)拖到“应用程序”文件夹中一样简单,而卸载则需要将其拖到垃圾桶中。就是这样,(通常)不需要花哨的安装程序。
在 Windows 上,应用程序通常由需要“注册”的独立组件构建。这涉及安装程序向 Windows 注册表写入一些零散的内容,以告诉 Windows 在哪里可以找到组件。是的,应用程序可能应该知道在哪里可以找到它们(因为它们都安装在同一个地方),但是多年的遗留和连接组件的不同方式使我们达到了今天的水平。
通常,Windows 上的安装程序:
- 复制文件
- 寄存器组件
- 设置安全权限(如果适用)
- 将图标添加到“开始”菜单和/或桌面
- 向注册表写入更多内容,告诉 Windows 将程序添加到“添加和删除程序”
其他提示
该程序试图修改计算机,使其能够正常工作,而所有竞争产品都会失败。在 Windows 上,这意味着:
- 修改注册表中的任意键,直到它变得缓慢并且充满损坏的条目
- 将 DLL 替换为您的软件可以使用的单一旧版本
- 将尽可能多的文件传播到尽可能多的地方
- 创建卸载脚本以维持用户无需重新安装操作系统即可删除软件的错觉。在用户尝试运行此脚本的不太可能的情况下,您可以通过诸如“文件......可能被其他应用程序使用。您真的要删除它吗?是/否/也许/任何答案/所有答案都是正确的”
- 在不起眼的地方安装挂钩,以便您的软件在计算机启动时运行。这可能会减慢启动过程,但你的软件会立即启动,所以这是一个很小的代价......为你。
- 做一些晦涩的事情,需要很长时间,但没有人知道你做了什么(“安装程序正在准备安装”15 分钟做了什么?)
- 检查是否有足够的磁盘空间但使用32位整数以确保它不能安装在1TB磁盘上。
一个重要的任务是安装失败并打印错误:“安装失败。这可能是因为安装了防病毒软件。请停用它并重试。”这将确保用户开始不信任他们的防病毒软件(特别是当第二次运行期间安装成功时,因为安装程序中的隐秘错误没有被触发),并且很多人会忘记再次启用病毒扫描程序,甚至卸载该该死的东西。
全世界的病毒作者也是人!垃圾邮件占据了互联网上的大部分流量,这一定意味着它很重要,谁不想成为地球上最大社区的一部分呢?最重要的是,你可以通过这种方式赚大钱。你所需要的只是软弱的良心和/或一些犯罪能量。
安装程序的一个非常重要的部分是增加注册表项
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-7-9-23-64738-1349283462-3754093625-4491\IsYourWindowWideEnough\NotGivenUpYetHuh\GoAway\ImportantSystemInformation\Let See How You Can Handle Spaces\DamnIGottaStopSincePathsCanHaveOnl\ReinstalCtr
这个重要的系统计数器将有助于给用户造成不稳定的假象,直到他们强烈要求重新安装整个系统。这将帮助专业 IT 行业销售支持时间、销售新计算机、更多 RAM、更大硬盘或新 Windows 版本(它们 必须 会更好,对吧?)。
笔记:如果您认真对待本文,请寻求专业帮助。
使用“花式”的原因安装过程
- 记录安装过程 所以它可以重播(修复)或 撤消(卸载)
- 执行操作简化文件复制(创建注册表项,注册组件,执行其他任意操作) 醇>
“标准”大多数安装上的选项将是“标准位置通常需要的所有位,如Program Files”。安装时没有自定义,可能没有启用某些专家级功能。
维基百科告诉我们 典型的安装程序会创建或修改以下内容:
- 共享和非共享程序文件
- 文件夹/目录
- Windows 注册表项(仅限 Windows)
- 配置文件条目
- 环境变量
- 链接或快捷方式
因此,如果您的程序需要一项或多项修改,您应该创建一个安装程序来完成这项工作。
取决于您正在安装的程序。 “安装”可以是简单地将(相对较小的)可执行文件复制到目录,设置共享库,进行补丁级别检查(我的设计是在SP2或更高版本上运行 - 我是否有SP2或更高版本?)并更改系统配置,适用于当前用户或所有用户。他们中的大多数还使用包管理器注册安装,以便您以后可以轻松卸载。
安装人员 抽象部署复杂的软件基础设施的过程, ,通常是 通过方便、自给自足的用户界面包含在档案中.
该 UI 可以是图形化的,也可以基于在命令行(例如 unix shell)上输出的文本(例如bash)。在图形安装程序的情况下,最常使用所谓的安装引导程序,在后一种情况下,安装脚本可以是 bash 脚本、Microsoft 批处理脚本或在命令行上运行的其他任何脚本语言。
在里面 最简单的情况 一个应用程序很简单 一个可执行文件, 操作系统知道如何处理该文件才能运行它。应用程序文件可能驻留在包含子文件夹和其他辅助文件的文件夹中, 打包成一个档案. 。在这种情况下,可能不需要安装程序。
对于复杂的软件, 、整个软件平台和 与底层操作系统基础设施紧密集成 可能是可取的,例如强制执行软件产品的版权。
Windows 上的许多安装程序都提供 /e
或者 /extract
旗帜。例如 setup.exe /e
允许在安装程序不运行其安装脚本的情况下提取存档的内容。我最近需要做的只是 那.
心态转变
无论底层软件资产多么简单,安装程序几乎已经成为交付专业软件的常态。随着越来越多的精通计算机的用户以及将应用程序从一个桌面迁移到另一个桌面的愿望, 便携式软件, 通常以简单的存档形式提供,正变得越来越流行。
(我不知道我在安装程序上总共花了多少时间,但绝对是几天的时间。)
安装程序可以处理的任务有:
- 解包(通常使用奇异的高压缩存档器)
- 保证系统硬件要求
- 确保有足够的硬盘空间
- 确保软件平台运行时要求(例如'可再发行')
- 检查较新的软件更新
- 从远程存储库下载软件
- 创建和/或更新程序文件和文件夹
- 创建配置文件、注册表项或环境变量
- 安装软件驱动程序、安装或卸载设备
- 通过解释安装步骤、创建链接、快捷方式来提高日常用户的可访问性
- 通过书签等方式推广自己的软件...
- 通过在安装过程中逐张演示软件的要点,激励用户实际启动软件
- 通过软件捆绑创造额外收入
- 配置内核模块和自动运行的组件(例如守护进程、Windows 服务)
- 软件自动打补丁
- 设置文件夹、文件和用户权限
- 创建 UUID 引用以将软件耦合到安装实例并防止可移植性
附:如果您能想到其他要点,请告诉我,我会将它们纳入其中。