我使用Linux已经有一段时间了,我一直想知道Windows如何处理apt-get,aptitude,Pacman,yum和其他程序包管理器之类的程序缺陷。有时,我的程序包管理器会告诉我该程序包需要该库的该版本,否则会发生一些冲突。
Windows如何处理所有这些东西?
我使用Linux已经有一段时间了,我一直想知道Windows如何处理apt-get,aptitude,Pacman,yum和其他程序包管理器之类的程序缺陷。有时,我的程序包管理器会告诉我该程序包需要该库的该版本,否则会发生一些冲突。
Windows如何处理所有这些东西?
Answers:
没有。除非我们谈论的是.NET,否则它要求您根据编译器安装框架版本X。
其他一切都将引发错误。祝你好运missing dll xxxx.dll
。虽然,大多数安装程序都会包含必需的库才能运行该软件。
编辑4/4/2014:嗨,OP,看看今天刚刚发布的内容:
我只是想在可接受的答案上稍微扩展一下,因为它在细节上有点稀疏。菲利普的回答只字不提的策略是Windows实际上不用于解决或减轻程序依赖性问题,像分量存储器(WinSxS文件)全局程序集缓存,微星系统等。但在另一方面,他是基本正确的感觉到开发人员有责任在应用程序中包含任何自定义库,并在提交安装事务之前检查是否存在依赖项。
Windows比Linux具有更少的模块化和优点。不利的一面是,Windows更加单一,这意味着相对较少的操作系统组件是可移动的或可选的,例如Linux。(尽管Windows对此正在逐步好转。)
但从正面看,这意味着开发人员可以对用户将在其计算机上已经拥有的库做出更多的假设。并且这些库的各种版本(一旦安装)将并排存储在组件存储中,这样您就不再需要App1咆哮需要crapDLL.dll,而App2则咆哮着需要同一版本的crapDLL.dll。时间等
在Windows中,由软件作者决定为其库提供版本控制。Windows有一些功能可以帮助解决此问题。
与安装程序(.msi)交互的Windows Installer和Trusted Installer服务。还有一些支持技术,称为“隔离应用程序”和“并排程序集”,可帮助解决版本冲突。
对于.NET Framework应用程序,有全局程序集缓存,强名称程序集和核心清单。
在Windows 8和8.1中,有Windows App Store和Windows运行时库(替代Win32 API)。
编辑:大多数这些技术的核心是程序集清单,提供版本号,作者,从属程序集及其版本以及其他数据的嵌入式文件。
其他答案正确地指出了程序包管理和操作系统是分开的想法,但是没有提及解决方案。
Windows上与apt-get或yum最相似的软件包管理系统是Chocolatey。它允许人们安装/卸载软件包(msi,exe,powershell脚本等),并且这些软件包可以包含有关其依赖项的信息,这些信息可以由Chocolatey自动解决。
该软件包通常包含指向二进制文件和脚本的链接,以管理安装过程。该软件包还可以包含二进制文件或任何其他必需的文件(相关性应放在单独的软件包中)。Chocolatey还可以使用外部程序包管理系统,例如Microsoft的Web平台安装程序,Ruby Gems,Python等。