如果您在LoadLibrary
没有路径的情况下调用(例如,LoadLibrary("whatever.dll")
Windows 通常会遵循其标准搜索算法,与它用于查找 EXE 的算法相同。
我的问题是:假设应用程序清单指定了系统 DLL 的特定版本,例如 comctl32.dll 6.0。在这种情况下,会LoadLibrary("comctl32.dll")
立即转到正确的并排文件夹,还是仍然执行某种搜索?
如果您在LoadLibrary
没有路径的情况下调用(例如,LoadLibrary("whatever.dll")
Windows 通常会遵循其标准搜索算法,与它用于查找 EXE 的算法相同。
我的问题是:假设应用程序清单指定了系统 DLL 的特定版本,例如 comctl32.dll 6.0。在这种情况下,会LoadLibrary("comctl32.dll")
立即转到正确的并排文件夹,还是仍然执行某种搜索?
来自微软:
应用程序可以通过指定完整路径、使用 DLL 重定向或使用清单来控制加载 DLL 的位置。如果没有使用这些方法,系统会在加载时搜索 DLL,如本主题中所述。
所以是的,如果存在清单,它将直接进入 SxS 文件夹。
要在遇到缺少库的问题时探测加载程序,您可以使用“sxstrace”功能。www.codeproject.com/KB/DLL/QueryAssemblyIdentities.aspx提供了有关清单和 WinSxs 之间依赖关系的一些详细信息。