Windows 如何处理程序依赖关系?

Nic*_*ico 23 windows package-management

我使用 Linux 已经有一段时间了,我一直想知道 Windows 是如何处理像apt-getaptitudePacmanyum和其他包管理器这样的程序依赖的。有时,我的包管理器会告诉我这个包需要这个版本的库,或者会有一些冲突。

Windows 如何处理所有这些东西?

Rya*_*ies 40

2014 年 4 月 4 日编辑:嘿 OP,看看今天刚刚发布的内容:

http://blogs.technet.com/b/windowsserver/archive/2014/04/03/windows-management-framework-v5-preview.aspx


我只是想对已接受的答案进行一些扩展,因为它在细节上有点稀疏。Filipe 的回答没有提到 Windows 实际上确实用来解决或减轻程序依赖性问题的策略,例如组件存储 (WinSxS)、全局程序集缓存、MSI 系统等。但另一方面,他基本上是正确的感觉开发人员有责任在应用程序中包含任何自定义库,并在提交安装事务之前检查依赖项的存在。

Windows 不像 Linux 那样模块化,它有优点也有缺点。不利的一面是,Windows 更加单一,这意味着操作系统中可移动或可选的组件相对较少,就像在 Linux 中一样。(尽管 Windows 在这方面正在慢慢变得更好。)

但从好的方面来说,这意味着开发人员能够对用户将在他或她的机器上已经存在的库做出更多假设。并且这些库的各种版本,一旦安装,将并排存储在组件存储中,这样您就不再有 App1 抱怨需要 crapDLL.dll,而 App2 抱怨需要不同版本的 crapDLL.dll时间等


Fil*_*ido 29

它没有。除非我们谈论的是.NET,它要求您根据编译器安装框架版本 X。

其他一切只会引发错误。幸运的话,你会得到missing dll xxxx.dll. 尽管如此,大多数安装程序都会包含运行软件所需的库。

  • @Filipe 因此,您必须安装 V **C++** 运行时这一事实是您讨厌 .NET 软件的原因?此外,默认情况下 Windows 已经安装了 .NET 框架,因此如果您针对正确的版本,它将开箱即用。而且由于显而易见的原因,您必须下载和安装丢失的共享对象实际上并不限于任何特定的软件/语言/框架(您也可以在 *nix 中遇到相同的“问题”)。 (9认同)
  • 那么是否由每个程序的安装程序来检查依赖项?因此,如果安装程序很烂,您可能根本无法使用该程序。 (6认同)
  • @FilipeYaBaPolido:由于 VC++2008 运行时适用于 C++ 应用程序,而不是 .Net 应用程序,因此您的仇恨尤其错位。显然.Net 应用程序需要.Net 框架,C++ 应用程序需要C++ 框架(运行时),真的很简单。现在一个特定的软件包可能同时包含 C++ 和 .Net 部分,所以这两个部分并不是唯一的。 (2认同)
  • 伙计们放松,我不讨厌 .Net 或 VC++。我什至在需要时用 .Net/C# 编写代码,它是一个工具。但是我使用了一些不同的工具并看到了差异。对不起,如果我解释错了。 (2认同)

Gol*_*ich 9

在 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 等。