我或多或少只是一个业余程序员,并且在 .NET ClickOnce 世界中以编码方式长大。
当一个人“安装”一个程序时,实际上会发生什么?!
另外:一些小应用程序/工具只是从 exe 运行。为什么大多数程序都需要花哨的安装过程?有什么优点,缺点,优点和缺点?安装通常是必要的还是更像标准做法?
为额外的问题道歉。我只是希望一个简单的英语或多或少的外行对关键因素的解释。
我或多或少只是一个业余程序员,并且在 .NET ClickOnce 世界中以编码方式长大。
当一个人“安装”一个程序时,实际上会发生什么?!
另外:一些小应用程序/工具只是从 exe 运行。为什么大多数程序都需要花哨的安装过程?有什么优点,缺点,优点和缺点?安装通常是必要的还是更像标准做法?
为额外的问题道歉。我只是希望一个简单的英语或多或少的外行对关键因素的解释。
您确实看到了许多遗留原因,这些原因都已成为 Windows 世界的标准做法。
首先,一些对比,因为它并不总是这样。Mac OS X 中的“应用程序”只是一个内部具有特定结构的目录,并以.app
扩展名命名。安装应用程序就像将它(只是应用程序图标)拖到您的应用程序文件夹一样简单,卸载涉及将其拖到垃圾箱。就是这样,(通常)不需要花哨的安装程序。
在 Windows 上,应用程序通常由需要“注册”的独立组件构建。这涉及安装程序将一些零碎的内容写入 Windows 注册表,以告诉 Windows 在哪里可以找到组件。是的,应用程序可能应该知道在哪里可以找到它们(因为它们都安装在同一个地方),但是多年的传统和连接组件的不同方式让我们走到了今天。
通常,Windows 上的安装程序:
该程序试图修改计算机以使其正常工作并且所有竞争产品都失败。在 Windows 上,这意味着:
修改注册表中的任意键,直到它变慢并充满损坏的条目
用您的软件可以使用的单个旧版本替换 DLL
在尽可能多的地方传播尽可能多的文件
创建卸载脚本以维持用户无需重新安装操作系统即可摆脱软件的错觉。在用户尝试运行此脚本的不太可能的情况下,您可以教育他/她不要再这样做,例如“该文件....可能被其他应用程序使用。您真的要删除它吗?是/否/也许/任何答案/所有答案都是正确的”
在不起眼的地方安装挂钩,以便您的软件在计算机启动时运行。这可能会减慢启动过程,但您的软件将立即启动,因此对您来说,这是一个很小的代价。
做一些需要很长时间但没人知道你在做什么的晦涩的事情(“安装程序正在准备安装”15 分钟做什么?)
检查是否有足够的磁盘空间但使用 32 位整数,以确保它无法安装在 1TB 磁盘上。
一个重要的任务是安装失败并打印错误:“安装失败。这可能是因为安装了防病毒软件。请停用它并重试。” 这将确保用户开始不信任他们的防病毒软件(尤其是在第二次运行安装成功时,因为安装程序中的模糊错误没有被触发)并且很多人会忘记再次启用病毒扫描程序或甚至卸载该死的东西。
全世界的病毒作者也是人!垃圾邮件占 Internet 上的大部分流量,这一定意味着它很重要,谁不想成为地球上最大社区的一部分?最重要的是,你可以通过这种方式赚大钱。你所需要的只是一个虚弱的良心和/或一些犯罪能量。
安装程序的一个非常重要的部分是增加注册表项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 版本(它们一定更好,对吗?)。
注意:如果您认真对待本文,请寻求专业帮助。
使用“花式”安装过程的原因
大多数安装的“标准”选项将是“通常需要的所有位,在标准位置,如程序文件”安装,没有自定义,可能没有启用一些专家级功能。
安装程序通过方便、自给自足的用户界面,抽象部署通常包含在存档中的复杂软件基础架构的过程。
该 UI 可以是图形的,也可以基于在命令行上输出的文本,例如 unix shell(例如 bash)。在图形安装程序的情况下,通常使用所谓的安装引导程序,在后一种情况下,安装脚本可以是 bash 脚本、Microsoft 批处理脚本或其他任何在命令行上运行的脚本语言。
在最简单的情况下,应用程序只是一个可执行文件,操作系统知道如何处理该文件才能运行它。应用程序文件可能位于包含子文件夹和其他辅助文件的文件夹中,打包到一个存档中。在这种情况下,可能不需要安装程序。
对于复杂的软件,可能需要完整的软件平台和与底层操作系统基础设施的紧密集成,例如强制执行软件产品的版权。
Windows 上的许多安装程序都提供了/e
or/extract
标志。例如setup.exe /e
,允许在安装程序不运行其安装脚本的情况下提取存档的内容。我最近需要这样做。
心态转变
安装程序几乎已成为交付专业软件的标准,无论底层软件资产多么简单。随着越来越多的精通计算机的用户以及将应用程序从一个桌面迁移到另一个桌面的愿望,通常以简单存档形式交付的便携式软件正变得越来越流行。
(我不知道我在安装程序上总共花了多少时间,但绝对是几天的数量级。)
安装程序可能处理的任务是:
PS:如果您能想到其他要点,请告诉我,我会合并它们。
取决于您正在安装的程序。“安装”的范围可以从简单地将(相对较小的)可执行文件复制到目录,设置共享库,进行补丁级别检查(我设计为在 SP2 或更高版本上运行 - 我是否有 SP2 或更高版本?)和更改系统配置,适用于当前用户或所有用户。他们中的大多数还使用包管理器注册安装,以便您以后可以轻松卸载。
维基百科告诉我们,典型的安装程序会创建或修改以下内容:
因此,如果您的程序需要其中一项或多项修改,您应该创建一个安装程序来完成这项工作。