CreateProcess忽略lpCurrentDirectory / parent工作目录

时间:2011-11-22 09:07:13

标签: c++ winapi createprocess

我正在尝试使用CreateProcess从c ++应用程序执行外部进程。

在查找目录中存在的dll时,启动的应用程序失败。

使用Process Explorer(来自sysinternals)检查executwd进程显示进程工作目录是c:\ windows,而不是父工作目录。

使用lpCurrentDirectory对工作目录进行硬编码也无济于事。

使用系统命令,该过程确实正确执行。

修改的  有问题的目录不是模块目录,而是当前工作目录。

按预期搜索modules目录,但不包含dll (将sll复制到模块目录可以正常工作 - 但它是一种解决方法)

1 个答案:

答案 0 :(得分:2)

当您使用CreateProcess函数时,搜索的第一个目录是包含用于创建调用进程的图像文件的目录。这允许在不添加进程安装的情况下找到与进程关联的专用动态链接库(DLL)文件目录到PATH环境变量。如果找不到Dll文件,系统将在系统文件夹中搜索这些文件,例如system32或%windir%。

可以使用SetDllDirectory函数更改搜索路径。建议使用此解决方案,而不是使用SetCurrentDirectory或硬编码DLL的完整路径。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682600%28v=vs.85%29.aspx