标准“安装”实际上做了什么?

时间:2009-10-27 07:28:02

标签: deployment package installation platform

我或多或少只是一个业余爱好者程序员,并且在.NET ClickOnce世界中已经成长为编码方式。

当一个“安装”程序时,实际发生了什么?!

另外:一些小应用程序/工具只是从exe运行。为什么大多数程序需要花哨的安装过程?有什么优点,缺点,优点和缺点利弊?安装通常是必要的还是更像标准做法?

为额外问题道歉。我只是希望普通英语或多或少的外行人对关键因素的解释。

6 个答案:

答案 0 :(得分:30)

您真正关注的是许多遗留原因,这些原因都融入了Windows世界的标准做法。

首先,一些对比,因为它并不总是这样。 Mac OS X中的“应用程序”只是一个内部具有特定结构的目录,以.app扩展名命名。安装应用程序就像将它(只是应用程序图标)拖到“应用程序”文件夹一样简单,卸载涉及将其拖到垃圾箱。就是这样,通常不需要花哨的安装程序。

在Windows上,应用程序通常由需要“注册”的独立组件构建。这涉及安装程序将一些零碎的部分写入Windows注册表,以告知Windows在哪里可以找到组件。是的,应用程序可能应该知道在哪里找到它们(因为它们都安装在同一个地方),但是多年的遗留和不同的连接组件方式使我们处于今天的状态。

通常,Windows上的安装程序:

  • 复制文件
  • 注册组件
  • 设置安全权限(如果适用)
  • 在“开始”菜单和/或桌面
  • 中添加了图标
  • 将更多内容写入注册表,告诉Windows将程序添加到“添加和删除程序”

答案 1 :(得分:14)

程序尝试以这样的方式修改计算机,使其运行并且所有竞争产品都失败。在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版本(他们必须更好,对吧?)。

注意:如果您认真对待本文,请寻求专业帮助。

答案 2 :(得分:2)

使用“花哨”安装过程的原因

  1. 记录安装过程 所以它可以重播(修复)或 撤消(卸载)
  2. 执行操作简化文件复制(创建注册表项,注册组件,执行其他任意操作)
  3. 大多数安装中的“标准”选项将是“通常需要的所有位,在标准位置,如Program Files”安装,无需自定义,可能没有启用某些专家级功能。

答案 3 :(得分:1)

取决于您正在安装的程序。 “安装”的范围可以从简单地将(相对较小的)可执行文件复制到目录,设置共享库,进行补丁级别检查(我的设计是在SP2或更高版本上运行 - 我是否有SP2或更高版本?)并更改系统配置,适用于当前用户或所有用户。他们中的大多数还使用包管理器注册安装,以便您以后可以轻松卸载。

答案 4 :(得分:1)

Wikipedia tells us典型安装程序创建或修改以下内容:

  • 共享和非共享程序文件
  • 文件夹/目录
  • Windows注册表项(仅限Windows)
  • 配置文件条目
  • 环境变量
  • 链接或快捷方式

因此,如果您的程序需要一个或多个这些修改,您应该创建一个执行该任务的安装程序。

答案 5 :(得分:1)

安装程序通过方便,自给自足的用户界面抽象部署复杂的软件基础架构的过程,该过程通常包含在存档中。

此UI可以是图形的,也可以基于在命令行上输出的文本,例如unix shell(例如bash)。对于图形安装程序,通常使用所谓的安装 - 引导程序,在后一种情况下,安装脚本可以是bash脚本,Microsoft批处理脚本或其他任何在命令行上运行的脚本语言。

最简单的情况下,应用程序只是一个可执行文件,操作系统知道如何处理该文件以便运行它。应用程序文件可能位于包含子文件夹和其他辅助文件的文件夹中,打包到一个存档。在这种情况下,可能不需要安装程序。

对于复杂软件,可能需要整个软件平台和与底层操作系统基础架构的紧密集成,例如强制执行软件产品的版权。

Windows上的许多安装程序都提供/e/extract标记。例如setup.exe /e允许在不安装程序运行其安装脚本的情况下提取存档的内容。 我最近需要做that

心态转变

无论底层软件资产多么简单,安装人员几乎都成为提供专业软件的常态。随着越来越多精通计算机的用户以及将应用程序从一个桌面迁移到另一个桌面的愿望,便携式软件(通常以简单的存档形式提供)正变得越来越流行。

(我不知道我在安装程序上花了多少时间,但肯定是几天了。)

安装程序可以处理的任务是:

  • 拆包(通常使用异国情调的高压缩档案馆)
  • 确保系统硬件要求
  • 确保足够的硬盘空间
  • 确保软件平台运行时要求(例如'可再发行')
  • 检查更新的软件更新
  • 从远程存储库下载软件
  • 创建和/或更新程序文件和文件夹
  • 创建配置文件,注册表项或环境变量
  • 安装软件驱动程序,安装或卸载设备
  • 通过解释安装步骤,创建链接,快捷方式来增加日常用户的可访问性
  • 通过书签等宣传自己的软件......
  • 通过在安装过程中显示软件的关键点,滑动幻灯片,为用户实际启动软件创造激励
  • 通过软件捆绑创造额外收入
  • 配置内核模块并自动运行组件(例如守护进程,Windows服务)
  • 自动修补软件
  • 设置文件夹,文件和用户权限
  • 创建UUID引用以将软件耦合到安装实例并防止可移植性

PS:如果你能想到其他要点,请告诉我,我会加入它们。