为什么不是所有应用程序都“可移植”?


45

最近,我一直在尝试在Windows机器上少安装一些东西(我讨厌安装程序-我需要知道程序在哪里放置东西...),而是选择使用便携式或独立版本的应用程序。

我将它们全部放置在与Windows分区分开的驱动器上的“程序”目录中,因此,每当我重新安装时,我都可以以最小的努力获得所有应用程序,并且从好的方面来说,我得到了一个不错的清洁设置。

Office和Creative Suite之类的应用程序仍然需要我经历极其漫长的安装过程,在该过程中,我的系统中抛出了数千个随机库和工具。

为什么Windows应用仍需要安装?为什么我们不能仅将Photoshop拖到OSX文件夹中并使其正常工作?是否还有其他人专注于便携式应用程序,还是我只是整个过程的强迫症?


3
问题的答案确实解释了疑问的“为什么”。然而,令人鼓舞的“但是为什么”仍然存在(如“但是为什么我们都不能相处”)。
dbkk101

2
我也讨厌安装程序。您没问题
尼克,2010年

2
这看起来像是一个错误的问题。如果要使用便携式应用程序,则正确的问题似乎是:“哪些程序可移植?”。例如,当您真正需要的是可以读写.doc数据文件的程序时,您可能认为您需要MS Word。Open Office可以做到这一点...并且,与MS Word不同,它可以以可移植的格式使用...我已经在闪存驱动器上得到了它的副本(和Abiword),而所有时间都花在了笔记本电脑上。有很多便携式应用程序。portablelinuxapps.org提供184适用于Linux,而portableapps.com/apps报价232 +

Bill的其余评论: ...一个用于Windows的菜单应用程序[可以说,它们都包含了许多简单的实用程序])。选择所需的程序,并抛弃您无需做的不可移植程序...我的大多数应用程序都生活在USB闪存盘上。至少,这将简化HD上文件的意大利面条汤。
studiohack

在我看来,最好的工具是便携式的。我可能有偏见。
VlastimilOvčáčík2015年

Answers:


35

安装程序是多年发展的结果,并且有一些(简化的)历史可以帮助您理解为什么要执行自己的工作。

Windows 3.1模型建议每个应用程序使用config.ini样式的配置文件,并支持将共享库放入系统文件夹中,以防止重复和浪费磁盘空间。

Windows 95引入了注册表,该注册表允许用于存储应用程序配置的中央存储,从而替换了许多配置文件。更重要的是,Windows配置存储在同一位置。

由于应用程序自身未清除,注册表变得肿。DLL地狱是由于相同共享库的多个版本相互覆盖而导致的。

.NET引入了app.config的概念(这次,几乎是ini文件标记为2,这次有了更多的结构,节省了开发人员在编写手动解析器上的时间)。GAC引入了版本共享程序集,以防止DLL地狱。

在Windows XP中以及在Vista中,Microsoft尝试将用户空间定义为在单个标准位置存储用户数据和配置文件的位置,以允许漫游配置文件并使用Program Files中安装的应用程序轻松迁移(只需复制您的配置文件) 。

所以我想,原因是“ Windows中的应用程序被设计为位于一个位置,共享的依赖项位于另一个位置,而用户特定的数据位于另一个位置”,这与xcopy复制单个位置的概念大相径庭。

..那是您必须配置用户帐户,设置和确保安全权限,下载更新并安装Windows服务之前的步骤。

xcopy是“简单的案例”,当然并不是最适合所有情况。


1
尼斯,简单的解释!
alex

7
安装程序(尤其是Office)的另一个重要原因是,如果不是管理员,则任何用户都不能影响同一系统上的其他用户。Office 2007的重量约为500MB,如果用户要使用它,则必须拥有自己的本地副本。对于同一系统上的3个用户,这将是1.5GB!Google Chrome会安装到您的本地用户目录中,因此,如果您有10个都拥有Chrome的用户,则必须更新和维护10个不同的版本。显然,按用户安装与集中部署相比,各有利弊。
约书亚

1
可以简单地复制某些应用程序,例如Photoshop(至少在CS4之前的版本中),并且在启动时会创建所需的用户配置存储和文件。同样,大多数.NET应用程序在设计上都是可移植的,但是最终用户希望获得下一个下一个完成安装程序-许多甚至不知道文件系统是什么。
Oskar Duveborn 2010年

还应注意,即使应用程序旨在将设置/库/特定内容划分到不同的位置,但这也不是一个很好的习惯。我经常在程序目录的文件中找到不同应用程序的设置,并且经常可以共享的库在程序目录中静态链接。由于对程序员来说,以一种或另一种方式做事没有真正的好处,因此遵守规则的动机很弱,并且发生了狂野的西部应用程序开发:-)。另外,我认为传统很强。
Daniel Andersson

GAC只是DLL地狱的第二次来临。这是个不错的概念,但是在现实生活中,由于不同的可执行文件与同一文件的不同版本绑定,您最终会感到困惑,并且这些文件的某些版本可能存在安全漏洞。如果您需要一个安全的环境,这是一个万能的混乱。现在,您实际上必须修补同一文件的不同版本才能修补相同的安全漏洞。欢呼!应该指出的是,政策和强制性重定向可以有所帮助,但这就像说创可贴可以帮助避免伤口受伤一样。
SteinÅsmul2011年


7

很好的问题,我前段时间问了一个有关 Stack Overflow的相关问题

答案通常似乎是“因为这就是我们过去所做的事情”。对不起,但是那不会陪伴我。

其他一些人则说主要原因是由于注册表。如果您正在谈论设备驱动程序或某些其他COM组件等,那么可能是必需的,但对于诸如文字处理器或电子表格之类的GUI应用程序则不需要。

编写应用程序很有可能,它可以在启动时检查所需的注册表设置,并提示用户输入它们/使用默认值。或者,就像当前许多可移植的应用程序一样,jst让用户知道当前操作系统集成受到限制,因为您正在便携式模式下运行。

安装程序通常还对应用程序的工作方式有很多“知识”。然后,当应用程序更改时,您通常还必须更新安装程序。这是我在时间编程中遇到的错误/问题的经典原因。

这是一种合适的方法。


6

简单明了的答案:这只是谁拥有控制权的问题。如今,大多数软件都是由公司巨头为公司或机构环境设计的,在该环境中,用户被告知要做什么而不是告诉计算机要为他们做什么。

您的问题非常重要,因为它提出了一个关于个人权利和自由的基本问题,个人权利和自由正越来越受到侵蚀,而不是像过去的社会那样被暴君侵蚀,而是由于公司的贪婪以及少数人控制多数人的需要。

实际上,我们似乎已经忘记了曾经谴责IBM之类的巨头的暴政的人已经成为当今的IBM。。。仔细观察一下Microsoft,Apple的商业惯例和Adobe仅举几例,直截了当地告诉我,与IBM的业务实践相比,具有限制性的许可证更为有益,而正是IBM的开放性实际上引领了个人计算革命的道路...

多年来,我一直在使用许多自包含的便携式应用程序,毫无疑问,它们在占用空间和资源方面被证明是最有效,最快和最小的,而且最后但并非最不重要的是,它们不仅优于其上流软件同行,但大多数时候,他们也是免费的。

现在是第二次个人计算机革命的时候了。通过减少膨胀和澄清设置的存储位置(在有形物理介质上不同物理位置上的一个不同文件夹中)来提高可移植性,是朝正确方向迈出的一步。


5

注册表和每个用户存储的组合。该注册表是一个关键部分,特别是如果你的应用程序是COM基础(需要注册,在注册碰巧)。每个用户的存储(配置等)也是重要的组成部分。唯一的好方法是将其存储在一些特殊设计的目录中(请参阅隔离存储)。


究竟。操作系统如何在没有固定位置的情况下找到要加载的EXE或DLL?“设置oExcelApp = CreateObject(“ EXCEL.APPLICATION”)“需要以某种方式工作。
Zan Lynx

4

主要是因为Windows注册表-即使您的程序位于某个目录中,设置也经常存储在注册表中。

也可能是因为该程序将文件放置在计算机上除安装目录(例如system32)以外的其他目录中


3

与Xcopy /便携式安装类型相比,安装程序的一大优势是自我修复。

正确使用Windows Installer系统的应用程序会将有关它的各种信息保存在计算机上的Windows Installer数据库中,并且经常会缓存安装文件重要部分。

如果应用程序由于某种原因而中断(其他原因会删除/替换文件,注册表损坏,磁盘问题,用户删除快捷方式等),则如果其为“广告快捷方式”,则安装程序每次启动时实际上都会检查密钥文件和密钥,并且如果不存在,则将其替换,或者您可以进入“添加/删除程序”,然后在应用程序上单击“修复”。


为什么在阅读此Adobe Reader桌面图标时我唯一想到的是什么?那个人如此疯狂地自我修复,令人难以置信^^
Oskar Duveborn

2

我认为部分原因与Windows应用程序所需的大量废纸do有关。例如,注册表项,用户数据(/ Users // AppData)。也许OSX可以更好/不同地处理这个问题。

再说一次,创建可以从存档中提取的应用程序并非没有可能-在这种情况下,我总是很高兴。


2

.Net Framework是启用此类功能的平台,并且大多数情况下仅使用安装程序,因为这是普通用户所习惯的。Mac用户用于将文件复制到“应用程序”文件夹中的方式相同。

大多数安装程序只需将文件扩展到Program Files文件夹并创建快捷方式。这更多地是用户了解的情况,并且即使应用程序是可移植的,通常也只是为了使过程保持相同而更加简单。


2

有些程序要求安装位置在注册表中,而其他程序可能会将其位置硬编码到程序中(perl.exe就是这种情况)。

基本上,主要原因是程序员采取了简单的方法,然后将某些东西硬编码到程序中,无论是注册表项还是实际的硬编码路径。


2

许多Windows应用程序必须使用系统环境或服务,例如SQL Server,IIS,WMI,安全域,Active Directory等。典型的用户可能不知道如何配置它们,甚至可能无法访问它们。

像Microsoft Office这样的应用程序不是单个文件。它们包含许多文件,可执行文件,实用程序,服务,模板,插件,驱动程序等。当您安装应用程序时,您不能仅仅覆盖新应用程序使用的所有内容,它必须与现有功能相适应。Windows安装程序不仅可以复制文件,还可以查询系统环境,运行脚本和安装服务,以及像设置管理员一样设置计算机。

dbkk101询问为什么Windows应用程序“不能全部相处”。他们可以,这就是安装程序的用途。


2

有了某些程序,安装就很愚蠢了,但不仅仅是“将文件拖入程序目录”。

至少,一个体面的安装程序可以解压缩安装文件并设置适当的快捷方式,并在不再需要时可以轻松删除程序。我认为解压缩和复制可能是花费时间最长的过程。

然后是共享文件-在Linux世界中尤其如此,尽管在Windows IMO中却不是很多。

最重要的是,需要为机器配置一些程序,而某些程序(至少是我想)会根据机器进行优化,或者至少这是Adobe对话框让我相信的。

另外,我从未见过要在单独的分区上安装的理由。您往往会丢失所有注册表值和配置设置。另外,我实际上更喜欢这种损失,因为它可以减少Windows膨胀。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.