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

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

我已经使用 Linux 很长一段时间了,我一直想知道 Windows 如何处理程序依赖关系,例如apt-get资质吃豆人好吃和其他包管理器都可以。有时,我的包管理器会告诉我这个包需要这个版本的库,或者会存在一些冲突。

Windows 是如何处理所有这些内容的?

答案1

不是。除非我们谈论的是。网它要求您根据编译器安装框架版本 X。

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

答案2

编辑于 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 等等。

答案3

在 Windows 中,软件作者负责为其库提供版本控制。Windows 有一些工具可帮助实现这一点。

Windows Installer 和 Trusted Installer 服务与安装程序 (.msi) 交互。还有一些称为“独立应用程序”和“并行程序集”的支持技术可帮助解决版本冲突。

对于 .NET 框架应用程序,有全局程序集缓存、强名称程序集和核心清单。

在 Windows 8 和 8.1 中,有 Windows 应用商店和 Windows 运行时库(win32 API 替代品)。

编辑:大多数这些技术的核心是程序集清单,即提供版本号、作者、相关程序集及其版本以及其他数据的嵌入式文件。

答案4

据我所知,Windows 处理的唯一依赖项是 Microsoft 特定的库。例如,如果您在 Windows 中安装 Blender 等开源程序,它将在其自己的单独 dll 文件中拥有 libavcodec 和 ffmpeg 库,如果您随后安装 OpenShot,它将在其自己的目录中安装自己的 libavcodec 副本,并且它们可能是完全不同的版本。当卸载软件以清理遗留的垃圾时,这可能是一场噩梦,并且它还会占用更多的磁盘空间和库冗余。

相关内容