Qt5应用程序部署qwindows.dllsearchpath顺序

我正在将我们的应用程序与所需的DLL部署在同一个文件夹中。 加上平台文件夹中的qwindows.dll。

这真的很好,也没有任何Qt安装机器。

直到昨天,当我更新我的Qt到5.5.1。 现在所有使用Qt 5.5.0构build的应用程序停止工作,并显示出众的错误:“无法find或加载Qt平台插件的窗口”。

当我将我的Qt文件夹(C:\ Qt)重命名为其他内容时,所有事情都可以再次运行。

进一步调查与依赖沃克表明,应用程序的确看着我的C:\ Qt文件夹来find平台的DLL。 但他们发现一个更新/不同的版本,并抛出错误。

GetProcAddress(0xxxx [ADVAPI32.DLL], "SystemFunction036") called from "MSVCR120.DLL" at address 0xxxx and returned 0x00007FFB269C1050. LoadLibraryW("C:\Qt\5.5\msvc2013_64\plugins\platforms\qwindows.dll") called from "QT5CORE.DLL" at address 0xxxx. Loaded "QWINDOWS.DLL" at address 0xxxx. Successfully hooked module. Loaded "WINMM.DLL" at address 0xxxx. Successfully hooked module. Loaded "OLEAUT32.DLL" at address 0xxxx. Successfully hooked module. Loaded "WINMMBASE.DLL" at address 0xxxx. Successfully hooked module. Loaded "DEVOBJ.DLL" at address 0xxxx. Successfully hooked module. Unloaded "QWINDOWS.DLL" at address 0xxxx. Unloaded "OLEAUT32.DLL" at address 0xxxx. Unloaded "WINMM.DLL" at address 0xxxx. Unloaded "WINMMBASE.DLL" at address 0xxxx. Unloaded "DEVOBJ.DLL" at address 0xxxx. LoadLibraryW("C:\Qt\5.5\msvc2013_64\plugins\platforms\qwindows.dll") returned NULL. Error: Die angegebene Prozedur wurde nicht gefunden (127). 

现在,如果C:\ Qt文件夹被重命名,那么应用程序就不会在那里find它,并且像./platforms/一样使用qwindows.dll。

现在的问题是,这是行为吗? 不应该在search其他地方之前先search应用程序目录吗? 有没有可能改变这种行为?

Solutions Collecting From Web of "Qt5应用程序部署qwindows.dllsearchpath顺序"

我找到了适合我需求的答案。

有可能将qt.conf文件放在与部署的exe相同的目录中。 在这个文件中,你可以像这样指定插件目录:

 [Paths] Plugins=. 

这意味着Qt只会搜索插件! 在这个文件夹中。 在这个例子中, qwindows.dll需要在平台/像我们习惯的。

这对我来说是完美的,因为我有qt dll和插件完全分开,我想要部署每个应用程序。 而且安装的Qt版本不再干扰。

一个非常详细的写法可以在这里找到: http : //www.tripleboot.org/? p=536在“由Qt本身加载的DLL插件”插件:“

我找到了解决方案。 您需要添加此环境变量并指向qwindows.dll:QT_QPA_PLATFORM_PLUGIN_PATH = C:\ Program Files \ Your_App_Path \ platforms

它为我工作。