Nic*_*ico 23 windows package-management
我使用 Linux 已经有一段时间了,我一直想知道 Windows 是如何处理像apt-get、aptitude、Pacman、yum和其他包管理器这样的程序依赖的。有时,我的包管理器会告诉我这个包需要这个版本的库,或者会有一些冲突。
Windows 如何处理所有这些东西?
Rya*_*ies 40
2014 年 4 月 4 日编辑:嘿 OP,看看今天刚刚发布的内容:
我只是想对已接受的答案进行一些扩展,因为它在细节上有点稀疏。Filipe 的回答没有提到 Windows 实际上确实用来解决或减轻程序依赖性问题的策略,例如组件存储 (WinSxS)、全局程序集缓存、MSI 系统等。但另一方面,他基本上是正确的感觉开发人员有责任在应用程序中包含任何自定义库,并在提交安装事务之前检查依赖项的存在。
Windows 不像 Linux 那样模块化,它有优点也有缺点。不利的一面是,Windows 更加单一,这意味着操作系统中可移动或可选的组件相对较少,就像在 Linux 中一样。(尽管 Windows 在这方面正在慢慢变得更好。)
但从好的方面来说,这意味着开发人员能够对用户将在他或她的机器上已经存在的库做出更多假设。并且这些库的各种版本,一旦安装,将并排存储在组件存储中,这样您就不再有 App1 抱怨需要 crapDLL.dll,而 App2 抱怨需要不同版本的 crapDLL.dll时间等
Fil*_*ido 29
它没有。除非我们谈论的是.NET,它要求您根据编译器安装框架版本 X。
其他一切只会引发错误。幸运的话,你会得到missing dll xxxx.dll. 尽管如此,大多数安装程序都会包含运行软件所需的库。
在 Windows 中,由软件作者为其库提供版本控制。Windows 有一些工具可以帮助解决这个问题。
与安装程序 (.msi) 交互的 Windows Installer 和 Trusted Installer 服务。还有一些称为隔离应用程序和并行程序集的支持技术可以帮助解决版本冲突。
对于 .NET 框架应用程序,有全局程序集缓存、强命名程序集和核心清单。
在 Windows 8 和 8.1 中,有 Windows App Store 和 Windows 运行时库(win32 API 替换)。
编辑:大多数这些技术的核心是程序集清单,提供版本号、作者、依赖程序集及其版本以及其他数据的嵌入式文件。
小智 6
其他答案确实正确地指出包管理和操作系统是不同的想法,但没有提到解决方案。
与 Windows 上的 apt-get 或 yum 最相似的包管理系统目前是Chocolatey。它允许人们安装/卸载软件包(msi、exe、powershell 脚本等),这些软件包可以包含有关其依赖项的信息,这些信息可以由 Chocolatey 自动解析。
该软件包通常包含指向二进制文件和脚本的链接以管理安装过程。该包还可以包含二进制文件或任何其他必需的文件(依赖项应该在单独的包中)。Chocolatey 还可以使用外部包管理系统,如 Microsoft 的Web Platform Installer、Ruby Gems、Python 等。