【发布时间】:2016-02-03 00:36:59
【问题描述】:
一些 DLL 是特殊的,操作系统将加载官方安装的副本,无论是否在 PATH 上找到另一个同名的文件。
是什么让它特别?
在早于 Win10 的 Windows 版本上,“通用 CRT”可能通过 MS 提供的官方安装程序安装。是不是碰巧把它放在了found 所在的 System32 目录中,还是它也使它特殊?
对于编译器 RTL 再分发(msvcp140.dll、vccorlib140.dll、vcruntime140.dll)也是如此。
我怀疑那些在本地放置这些文件的程序,在与 EXE 相同的目录中,并将该目录放在 PATH 上,会导致不相关的程序中的加载错误。特别是,如果在路径中找到其中一个 DLL 并且是错误的平台(32 位与 64 位),这将导致在程序尝试运行时出现一个神秘的对话框。
尽管不鼓励在本地安装上述 DLL 以支持使用官方安装程序,但这是否真的有效,或者每个应用都需要在本地安装以防止被 PATH 上完全不相关的程序损坏?
“本地安装”程序(即将所有内容解压到一个目录并从那里运行)如何应对?我对 VS2015、32 位和支持最多种类的旧操作系统特别感兴趣。
【问题讨论】:
-
为避免疑问,这并不能回答您的问题,但是:程序真的不应该将重新分发的 DLL 放在路径上。这是一个非常糟糕的主意。