2009-10-27 20 views
19

我只是一个爱好者程序员或多或少,并已成长在.NET ClickOnce世界的编码方式。标准“安装”实际上做了什么?

当一个“安装”一个程序,究竟发生了什么?!

另外:一些小应用程序/工具只是从EXE运行。为什么大多数程序需要一个奇特的安装过程?有什么优点,缺点,优点&缺点?安装通常是必要的还是更像标准实践?

道歉的额外问题。我只是希望一个简单的英语或多或少的外行人对关键因素的解释。

回答

28

你真的在寻找很多遗留的原因,所有这些原因都已经成为Windows世界的标准实践。

首先,有些反差,因为它并不总是这样。 Mac OS X中的“应用程序”仅仅是一个内部具有特定结构的目录,以.app扩展名命名。安装应用程序非常简单,只需将它拖到应用程序文件夹即可,而卸载包括将其拖至垃圾箱。就是这样,没有花哨的安装者(通常)是必需的。

在Windows上,应用程序通常由需要“注册”的独立组件构建。这涉及到安装程序将一些零碎片段写入Windows注册表,告诉Windows在哪里找到组件。是的,应用程序可能应该知道在哪里可以找到它们(因为它们都安装在同一个地方),但多年传统和不同的连接组件的方式让我们获得了今天的位置。

通常情况下,在Windows安装程序:

  • 将文件复制
  • 寄存器部件
  • 组安全权限(如适用)
  • 将图标添加到开始菜单和/或桌面
  • 向注册表中写入更多内容以告诉Windows将程序添加到“添加和删除程序”中
+0

会upvote,但今天跑出去:( – RCIX 2009-10-27 08:33:36

+0

Thx的答复格雷格。现在,任何不能完成的应用程序的第一次运行?只是好奇,这是必要的或只是'完成' – MrGreggles 2009-10-27 08:59:12

+1

很多这确实可以在应用程序的第一次运行中完成,然而,首先安装程序存在的主要原因之一是提供* uninstaller *。通常Windows应用程序需要在周围的许多地方文件系统和注册表是唯一一个清理它的好方法,就是让程序为你做这件事 – 2009-10-27 09:01:47

1

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

+0

还有一些程序包括注册表更改或其他更改。 IronRuby的安装程序设置文件,NGEN在机器上的文件,并设置%PATH%以包含IronRuby的可执行文件以用于命令行。 – 2009-10-27 07:33:18

+0

我想我用“改变系统配置”来覆盖那个 - 试图尽可能地使它成为系统无关的。 – ty812 2009-10-27 07:36:28

+0

Thx Martin,它有助于填写图片。顺便提一下,你的sig形象让我想起了几年前我在uni看到的一张汽车贴纸:“我是一名山地男子,我喜欢山区女性。”有点话题,但无论如何... – MrGreggles 2009-10-27 11:11:26

1

Wikipedia tells us,典型的安装程序创建或修改下列:

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

因此,如果您的程序需要一个或多个这些修改,您应该创建一个安装程序来完成这项工作。

+0

嗨Moayad,感谢您抽出时间。我仍然不确定所有这些东西都需要安装程序,但我想有些事情可以做。 – MrGreggles 2009-10-27 11:20:47

2

使用一个“神奇”的原因安装过程

  1. 记录安装过程 所以可以重播(修复)或 撤消(卸载)
  2. 执行操作beyons简单的文件复制(创建注册表项,注册组件,执行其他任意操作

大多数安装中的“标准”选项将是“通常需要的所有位,位于标准位置,如Program Fi文件“安装时没有自定义,可能没有启用某些专家级功能。

13

该程序试图修改计算机的方式,它的工作原理和所有竞争产品失败。在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行业销售支持时间,销售新电脑,更多内存,更大硬盘或新的Windows版本(他们必须更好,对吗?)。

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

+1

太棒了! :) +1 – 2009-10-27 08:10:12

+0

lolololol ...会upvote,但跑出去:( – RCIX 2009-10-27 08:34:14

+0

一个很好的阅读,thx。 – MrGreggles 2009-10-27 11:07:36

1

安装者抽象通过方便的,自给自足的用户界面部署软件基础设施,这通常是包含在归档中,复杂的片的过程。

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

简单的情况下的应用仅仅是一个可执行文件,与操作系统知道该怎么才能运行它与该文件做。应用程序文件可能位于包含子文件夹和其他辅助文件的文件夹中,打包到一个存档中。在这种情况下,可能不需要安装程序。

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

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

轮换着心态

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

(我不知道多少时间总共我已经花了安装程序,但它绝对是天量级)。

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

  • 拆包(通常利用外来,高压缩的归档)
  • 确保系统的硬件要求
  • 确保足够的硬盘空间
  • 确保软件平台运行时间要求(例如“再发行”)
  • 检查更新的软件更新
  • 从远程仓库
  • 下载软件创建和/或更新程序文件和文件夹
  • 创建配置文件,注册表项或环境变量
  • 安装软件驱动程序,安装或卸载设备
  • 通过解释安装步骤,创建链接,快捷方式提高日常用户的可访问性
  • 通过促进自己的软件书签等...
  • 创造激励用户实际启动该软件,在安装时,滑动滑通过
  • 过程中呈现的软件的关键点创建额外的收入,通过软件捆绑
  • 配置内核模块和自动运行的组件(例如守护程序,窗口服务)
  • 的sofware的自动修补
  • 设定文件夹,文件和用户权限
  • 创建的UUID引用夫妇软件的安装实例,防止便携

PS:如果你能想到其他的点,让我知道,我会把它们合并。

相关问题