Installation 为什么应用程序需要安装?

Installation 为什么应用程序需要安装?,installation,Installation,我很困惑。现在我用C++和java编写一些小程序,但是没有一个需要安装。为什么需要安装浏览器、媒体播放器、游戏等“大应用程序”?主要是因为它们写入系统范围的数据或目录。例如,Windows应用程序会写入注册表,可能还会写入C:\Windows\system32。UNIX应用程序倾向于写入主目录中的隐藏配置文件(例如,将自身添加为打开特定文件类型的选项)、/usr/share和/等。这是实际二进制文件和库(可能位于/usr/bin和/usr/lib中)之外的内容 你的应用程序可能独立于一个目录中,

我很困惑。现在我用C++和java编写一些小程序,但是没有一个需要安装。为什么需要安装浏览器、媒体播放器、游戏等“大应用程序”?

主要是因为它们写入系统范围的数据或目录。例如,Windows应用程序会写入注册表,可能还会写入C:\Windows\system32。UNIX应用程序倾向于写入主目录中的隐藏配置文件(例如,将自身添加为打开特定文件类型的选项)、/usr/share和/等。这是实际二进制文件和库(可能位于/usr/bin和/usr/lib中)之外的内容


你的应用程序可能独立于一个目录中,这就是它不需要安装的原因。

一个主要原因是共享库(例如Windows中的DLL)-与其每个应用程序都有自己的DLL副本,不如将其放在所有应用程序都可以访问的系统目录中。避免重复拷贝可以节省磁盘空间


为了确保所有东西都放在正确的位置,因此你需要一个安装程序——它不再像复制/粘贴包含你的应用程序的目录那样简单。

通常,因为他们想在计算机上存储状态和信息。例如,您的应用程序将不会出现在“添加/删除程序”窗口中。许多程序(我个人不喜欢)喜欢在注册表中存储重要信息以进行查找,这意味着您通常需要一个卸载程序(而不仅仅是删除程序)来进行清理,或者它们可能会将扩展引入资源管理器或其他项。简单地删除程序不会清除这些添加,因此您需要一个卸载程序

因为他们做的事情如下:

  • 为各种类型写入注册表值 依赖关系
  • 复制数据
  • 创建目录

Etc

安装只意味着复制文件和设置注册表设置。应用程序越大,遵循标准程序就越容易

“安装”应用程序时:

  • 为方便用户创建卸载程序
  • 在注册表中设置默认设置(在Windows上)
  • 在用户配置文件中设置默认设置
  • 将可执行二进制文件复制到标准位置

幕后没有任何魔法,只是美化了复制。

例如,这可能有很多原因

  • 确保安装了依赖项(如.NET framework)
  • 向桌面/开始菜单添加快捷方式
  • 需要使用注册的服务
  • 许多用户喜欢这样做,而不必自己管理程序文件所在的位置
  • 添加注册表项
  • 将挂钩添加到windows资源管理器中

    • 有几个原因:

    • 它们与系统挂钩。安装浏览器时,如果打开以“http://”开头或以“.html”结尾的文件,浏览器将启动

    • 使用应用程序的人被用来安装它们。如果你的应用程序没有安装程序,用户会对如何安装和运行感到困惑。他们不知道在安装过程中会发生什么,他们只知道他们总是必须这样做。因此,一些应用程序(不需要安装程序)附带了一个简单的安装程序,以避免混淆

    • 许多复杂的应用程序可以以各种方式进行操作。您可以在安装过程中更改预设。一个常见的例子是要安装应用程序的哪些部分。对于CAD系统,您可以在会议室中安装整个系统,也可以只安装一台PC的查看器

    • 许多应用程序要求许可证密钥和/或在线身份验证以避免盗版

    • 许多应用程序都附带DLL。为了确保它们正常工作,它们会覆盖窗口系统目录中的所有DLL(可能会破坏所有其他应用程序,但谁在乎呢;-)


    • 你是如何运行Java应用程序的?这是一个很好的问题,我偶尔也会对自己产生一些疑惑。我一直认为这是因为“大应用程序”使用的注册表值(可能)需要配置为安装过程的一部分。如果应用程序依赖于系统库之外的任何库,则首先需要在C++中发布这些库,可以将DLL文件放入应用程序文件夹中,使其工作在ActiveX中,需要注册。要使应用程序不需要安装在mfc应用程序中,请选择静态库而不是共享库。dependency walker可能会给你很多帮助“”它会告诉你你的应用程序依赖什么?带有系统的本机库,如“shell32.dll,gdiplus.dll,…”所有这些都带有系统,无需发布。此处提到的所有内容都可以在不安装的情况下完成否,第5点,它们将dll放在运行时目录中。即使它与Sys32或任何windows文件夹中的DLL同名,它也不会破坏OS库。至少,这是你应该做的。。。