CreateProcess vs命令行和缺少的DLL

时间:2012-02-07 16:12:54

标签: winapi visual-c++

当我使用CreateProcess启动正在加载我的插件的应用程序(InDesign)时,我的插件无法加载,因为我的插件使用的DLL无法加载。奇怪的是,如果我双击应用程序或从命令行打开它,我的插件加载正常。

我调用CreateProcess的应用程序非常大,本身使用了几个DLL,其中一些也被我的插件使用。我已将它缩小到将无法加载的DLL。我将其设置为延迟加载,插件现在加载但在我调用它时不会加载该DLL。

我使用“Process Explorer”检查应用程序的PATH,以确保它与从命令行打开它时的相同。故障DLL的路径在PATH环境中,对于其他加载正常的DLL也是如此。

我使用和不使用插件启动许多不同的应用程序,之前从未见过类似的东西。

有人知道可能会发生什么吗?

糟糕...

嗯,我对env PATH错了,根据应用程序(InDesign)的启动方式而有所不同。看起来QuickTime更改了我的应用程序的PATH,将它的“Apple Application Support”文件夹放在顶部。在该文件夹中是一个与我正在使用的DLL名称相同的DLL,即libxml2.dll。当我使用LoadLibrary在我的插件中加载libxml2.dll时,找不到msvcr80.dll。羊肉。

抱歉分心...

1 个答案:

答案 0 :(得分:0)

加载应用程序和/或插件时检查工作路径。资源管理器和命令提示符通常显式设置,但另一个调用CreateProcess()的应用程序可能不会。