防止Windows在parsingdll依赖项时使用PATH envvariables?

当加载一个DLL(或者dynamic地使用LoadLibrary / Ex或静态)是否有可能阻止Windows使用PATH环境variables来查找DLL /其他DLL,要加载的DLL依赖于?

我可以find的dynamic链接库search顺序的文档似乎意味着没有办法阻止PATH被search,但也许我错过了什么?

我问这个问题的原因是,我们希望有一个快速失败的情况,当一个(静态)链接的DLL从应用程序文件夹丢失,但可能存在(不同版本)的PATH。

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

对于静态加载的dll:作为程序集一部分的Dll仅在WinSxS和应用程序的文件夹中进行搜索。 所以,创建一个“虚拟”程序集来保存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> 

将此代码添加到需要使用完全dll的任何项目:

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

如果dll不存在于同一个文件夹中,将无法加载。

加载你的dll之前,你可以从代码中改变PATH环境变量。 然后可能还原它后。