【问题标题】:Self installing application or separate installer?自安装应用程序或单独的安装程序?
【发布时间】:2009-02-02 16:19:58
【问题描述】:

要在新计算机上安装应用程序,目前使用的主要方法似乎有两种:

  1. 单独的安装程序:创建单独的安装程序包 创建所有目录、文件、 您需要的注册表项 应用程序(即 MSI、InstallSheild 等),然后最后将您的应用程序复制到目标计算机。
  2. 自行安装程序:包括所有必需的 组件中的安装步骤 这是您的应用程序的一部分。然后在每次运行主应用程序可执行文件时使用此组件检查并创建所需的设置。即只需运行应用程序即可安装。

我使用过一些应用程序,它们的设置会随着时间的推移而损坏,而且大多数应用程序都有单独的安装程序。因此,唯一的解决方法是重新安装,有时设置甚至数据都会丢失(非常令人沮丧)。

在我从事的软件项目中,单独的安装程序方法通常要求在安装程序包和实际应用程序中传播特定于应用程序的知识。然后,当进行代码/功能更改时,安装程​​序和应用程序都需要更新。总觉得有点太脆,容易出现人为错误。

所以我目前倾向于自我安装方法,因为安装/设置更简单更强大,即只需运行应用程序。我觉得这种自我安装的方法也会让自己成为一个更强大的应用程序。

与应用程序设置(选项)的集成也会更加简洁,在许多情况下,同一个组件可以执行安装和设置管理。

然而,不利的一面是,每次应用启动时执行这些额外的检查/步骤可能会对启动时间产生负面影响,并且操作系统集成可能比使用标准安装程序需要更多的工作。

那么人们推荐哪种方法,为什么?

(目前我最感兴趣的是安装桌面富客户端应用程序。)

【问题讨论】:

    标签: language-agnostic installation


    【解决方案1】:

    这两种方法各有利弊:

    • 拥有安装程序是安装必要系统组件(如驱动程序、库、COM 组件等)的正确方法。由于其中许多活动都需要提升权限,因此管理员可以执行安装,而所有用户都可以使用该应用程序。

    • 在企业环境中实际上可能需要可编写脚本的安装过程。

    • 没有安装程序为便携式应用程序开辟了道路。如果程序将所有内容都放在一个目录中,则可以简单地将其复制到 U 盘并在任何系统上运行。当然,这对于您的特定应用类型可能没有意义,但这由您决定。

    我不确定设置损坏的问题在这里是否真的很重要。如果设置损坏(为什么?) - 应用程序如何知道如何处理它? OTOH 当然也可以编写安装程序以不盲目地覆盖任何旧设置。这一切都取决于...

    编辑:您在评论中写道:

    即使是便携式应用程序也需要某些配置/设置,让主应用程序在每次启动时检查设置是否有效/存在,并仅在需要时提示用户不是更好吗?

    再一次,这真的取决于您的需求。有不同类型的配置设置或首选项,您必须单独决定:

    • 如果应用程序由当前用户首次运行,每用户配置设置将丢失。显示缺少的消息以及如何创建它会很有帮助。例如,在FlameRobin(Firebird 的数据库管理程序)中,当在程序启动时找不到已注册的服务器和数据库时,我们会显示一条消息,以及如何注册它们。

    • UI 行为的每用户设置也将丢失,但它们有默认值。用户将获得应用程序的默认行为,然后可以在选项对话框中进行更改。由于最好尽量减少此类设置的数量,并且由于默认值应该是大多数用户期望的或在一般情况下效果最好的默认值,因此也无需在程序启动时打扰用户。

      李>
    • 某些配置可能不是针对每个用户,而是针对每个程序。这通常存储在标准用户没有写入权限的位置,因此检查并提示用户输入它并没有真正的帮助。可以做的是启动一个外部程序,向标准用户询问具有足够权限的帐户及其密码。

    【讨论】:

    • 我强烈支持没有安装程序,并允许应用程序是可移植的。 Eclipse (www.eclipse.org) 是我能想到的最好的例子。非常丰富的应用程序,但仍然便携。
    • 关于系统组件的公平点,但我现在真的只对桌面富客户端应用程序感兴趣。即使是便携式应用程序也需要某些配置/设置,不是更好让主应用程序在每次启动时检查设置是否有效/存在,并且只在需要时提示用户。
    【解决方案2】:

    在我看来,使用单独的安装程序是“更好”的方式。让应用程序自行安装不仅会给应用程序本身增加额外的工作量,它还会“绕过”底层操作系统的任何安装程序系统(如 Windows 上的 MSI)。

    如果应用程序随着时间的推移破坏了它的设置,它就会损坏并且需要修复。自安装程序应如何处理损坏的设置?只是用默认值覆盖它?用户也会对此感到恼火,因此让他们运行单独的安装程序并选择“修复”选项至少会更加透明。

    【讨论】:

    • 我不认为它总体上增加了额外的工作量。这只是移动的努力。每次启动时,自我安装程序都可以简单地检查损坏/删除/丢失的设置。找到后,会要求用户提供有效值或仅接受合理的默认值。
    【解决方案3】:

    我会推荐一个单独的安装程序,它可以执行以下操作:

    • 安装新安装
    • 修复现有安装
    • 删除现有安装

    我推荐这些选项的原因是因为这是我对 Windows 环境中安装程序的期望。

    我建议将安装和应用程序逻辑分成两个不同的应用程序区域的原因:

    • 安装程序和应用程序使用的依赖项之间可能存在冲突。
    • 我想确保我的团队在开发应用程序时不会无意中使用安装程序框架的依赖项中的类。

    【讨论】:

    • 因为保持简单确实是要走的路,我讨厌安装人员问我一堆我可能不知道如何回答的事情。您听说过一个名为 uTorren 的程序吗?我认为那里的每个应用程序都应该努力做到这一点,平均和精简。
    • @Oddthinking - 因为这是 Windows 平台上安装程序的常见行为。
    • @John - 我担心我们创建的安装程序依赖于一些我不想在主应用程序中使用的第三方库。我不想回头看看我的团队,以确保他们没有使用课程,因为它就在那里。
    • 好的,但是仅仅因为它是通常的行为并不意味着它对每种情况都是最好的。以我的经验,安装程序的想法并不是非技术用户立即理解的。我经常被问到为什么不能将程序从一台计算机复制到另一台计算机。这是一个有效的问题。
    【解决方案4】:

    感谢您的反馈。我开始认为这些方面的东西将是一个很好的折衷方法:

    • 通过创建主应用程序引用的安装程序组件(类库)来选择自安装程序方法。
    • 此组件是应用程序的核心部分,负责确保所有配置/设置都存在且有效。
    • 主应用程序。每次运行时,可执行文件都会要求此组件检查设置的存在性/有效性,并且仅在需要时提示用户。这可以通过将所有设置问题分组并在单个 GUI 中呈现(避免一系列烦人的对话)以用户友好的方式轻松完成。
    • 对于操作系统集成,安装程序组件(在 Windows 的情况下)确保将条目添加到应用程序的“添加删除程序”列表中,以及任何其他操作系统所需的约定。
    • 在应用程序中,安装程序组件还提供标准选项/设置屏幕。这样可以避免重复设置管理代码。

    我问这个问题是因为我遇到了许多非技术用户,他们问为什么他们不能简单地将应用程序从一台计算机复制到另一台计算机,他们可以使用他们的数据(例如照片、文档等)来做到这一点。这是一个非常有效的问题,尤其是对于面向 GUI 的桌面应用程序。

    多年来,单独的安装程序肯定是 Windows 上的“完成方式”。对于驱动程序/系统组件,显然它们通常是必需品。但对于桌面 GUI 风格的应用程序,我认为它们在用户/客户的简单性和可靠性方面并不是最好的。

    【讨论】:

    • 我用过的最好的自安装程序是 WinZip。将文件夹复制到一个新框,它会检测到并通过配置向导运行。简单的。如果您决定将 MSI 用于需要驱动程序、COM 等的应用程序,它仍应检查其依赖关系并在缺少某些内容时尽早提醒用户。
    • 您关于简单的 xcopy 安装最适合用户的观点已被采纳。但是,它也取决于您使用的开发环境。例如,Delphi 可以生成独立的可执行文件。使用 MSVC++ 7,您可以使用静态链接或在目录中部署运行时 DLL。对于 .NET 应用程序或 ...
    • 您需要安装运行时的最新 MSVC++ 版本,并且您将需要执行一些外行难以理解的步骤。
    • 我目前正在使用 .NET,所以是的,如果框架版本错误或根本没有安装,则无能为力。但是,我很高兴将 .NET Framework 的需求作为系统要求信息的一部分(类似于操作系统版本等)。不过好点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多