gpt4 book ai didi

c++ - CreateProcess 忽略 lpCurrentDirectory/父工作目录

转载 作者:行者123 更新时间:2023-11-30 04:31:23 25 4
gpt4 key购买 nike

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

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

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

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

进程确实使用系统命令正确执行。

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

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

最佳答案

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

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

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

关于c++ - CreateProcess 忽略 lpCurrentDirectory/父工作目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8224271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com