作为背景:我的申请要求:
通常,要使用API,我只需链接所需的* .lib文件。但是,它使用默认的搜索顺序,这意味着(根据https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order)它首先从“应用程序的加载目录”中加载DLL。因此,如果DLL位于同一目录中,则通过双击运行我的应用程序也会加载该DLL。我只想在系统目录中查找DLL(类似于https://stackoverflow.com/a/46182665/9015013。)>
我知道我可以尝试创建某种代理,例如
BOOL WinAPIFunction(WinAPIType param) { return reinterpret_cast<decltype(&WinAPIFunction)>( reinterpret_cast<void*>(GetProcAddress(manually_loaded_module, "WinAPIFunction")))(param); }
但是很难维护所有这些功能。有什么更好的方法可以强制窗口仅在system32中显示?我考虑过清单文件,但是它要求每个DLL的版本都可以打破“功能”要求(DLL对于Win7和Win10具有不同的版本)
作为背景:我的应用程序需要:可以在所有操作系统上运行对WinAPI DLL的管理员特权:Win7-Win10通常,要使用API,我可以链接所需的* .lib文件。但是它使用...
您可以尝试使用“已知DLL”功能:如果Windows“知道”该DLL,则Windows不会搜索dll文件。链接中描述了已知功能,您对此有疑问。
该解决方案由@Eryk Sun在上面的评论中发布。