在解析dll依赖项时阻止Windows使用PATH env变量?

Mar*_* Ba 1 c++ windows dll

当加载DLL(动态地或LoadLibrary/ Ex或静态地)时,是否有可能阻止Windows使用PATH环境变量来查找要加载的DLL依赖的DLL /其他DLL?

我可以为动态链接库搜索顺序找到的文档似乎意味着没有办法阻止搜索PATH,但也许我错过了什么?

我问这个的原因是我们希望有一个快速失败的方案,当应用程序文件夹中缺少(静态)链接的DLL但可能在PATH上存在(不同版本).

Chr*_*cke 5

对于动态加载的dll:控制加载哪个dll的最简单方法是不调用搜索逻辑.只有在提供部分路径时才会调用搜索逻辑 - 在调用LoadLibrary时提供dll的完全限定路径,如果该位置中不存在Dll,则调用将失败.

对于静态加载的dll:仅在WinSxS和应用程序的文件夹中搜索属于程序集一部分的Dll.因此,创建一个"虚拟"程序集来保存dll.这就像使用以下内容创建.manifest文件一样简单:

<!-- dummyassembly.manifest -->

<assembly manifestVersion="1.0">
    <assemblyIdentity type="Win32" name="dummyassembly" version="1.0.0.0" processorArchitecture="x86"/>
    <file name="thedll.dll"/>
</assembly>
Run Code Online (Sandbox Code Playgroud)

将此代码添加到任何只需要使用精确dll的项目中:

#pragma comment(linker, "/manifestdependency:\"dummyassembly'"\
                       " processorArchitecture='*' version='1.0.0.0' type='win32'\"")
Run Code Online (Sandbox Code Playgroud)

如果dll不存在于同一文件夹中,则无法加载.