【问题标题】:CreateProcess vs Command Line and missing DLLCreateProcess vs 命令行和缺少 DLL
【发布时间】:2012-02-08 03:51:14
【问题描述】:

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

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

我使用“进程资源管理器”检查了应用程序的 PATH,以确保它与我从命令行打开它时的路径相同。问题 DLL 的路径在 PATH 环境中,对于其他加载正常的 DLL 也是如此。

我启动了许多不同的应用程序,无论是否使用我的插件,以前从未见过这样的事情。

有人知道会发生什么吗?

糟糕...

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

抱歉打扰了……

【问题讨论】:

  • 您是否尝试过使用 ShellExecuteW?
  • 是的,我试过ShellExecuteEx、system和CreateProcess都是一样的结果。

标签: winapi visual-c++


【解决方案1】:

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

【讨论】:

  • 我忘了提...我创建了一个使用 CreateProcess 和麻烦 DLL 的小应用程序。从这个小应用程序我可以启动应用程序 (InDesign) 并且我的插件加载正常。
猜你喜欢
  • 1970-01-01
  • 2012-01-28
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2018-04-29
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
相关资源
最近更新 更多