gpt4 book ai didi

c - 当使用 CreateProcess 启动子程序时,不会在父程序的工作目录中搜索 DLL

转载 作者:可可西里 更新时间:2023-11-01 11:55:58 25 4
gpt4 key购买 nike

我有一个很奇怪的问题。我正在 Windows 下开发一个 C 程序,它将数据写入临时目录。它使用 GetTempFileName生成一个唯一的名称。数据实际上是一个exe,我以CreateProcess开头数据写入临时文件后。对于 lpCurrentDirectory 参数,我使用 NULL 以便使用父程序的当前工作目录成为子程序的工作目录。有所有需要的 DLL。

在大多数计算机(XP、2003、7、8)上,一切都按预期运行。但是在一个特定的 Windows 7 上,子程序启动时出现异常。非常奇怪,但如果我将所有需要的 DLL 移动到临时目录,一切都会按预期进行。

嗯,为什么不在父程序的工作目录中搜索 DLL?

非常感谢。

最佳答案

你原来的问题是问为什么子进程不继承父进程的工作目录。那么,如果您将 NULL 传递给 CreateProcess,那么新进程将在调用 CreateProcess 时继承父进程的工作目录。文档使这一点非常清楚,这里没有惊喜。 CreateProcess 的行为与宣传的完全一致。

编辑的问题集中在DLL搜索上。从这些信息中回答这个问题的新观点并不容易。最好的办法是在 Dependency Walker 的配置文件模式下运行该程序。这应该揭示出了什么问题。您可能会发现问题根本不是您所期望的那样。

为了将来引用,我建议您在提问时包括所有错误的完整详细信息。您声明引发了异常,但实际上您需要提供任何异常的完整详细信息。

关于c - 当使用 CreateProcess 启动子程序时,不会在父程序的工作目录中搜索 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16795125/

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