1

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

在大多数计算机(XP、2003、7、8)上,一切都按预期工作。但是在一个特定的Windows 7上,当子程序启动时,我得到了异常。很奇怪,但如果我将所有需要的 DLL 移动到 temp 目录,一切都会按预期工作。

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

非常感谢。

4

1 回答 1

2

您最初的问题询问为什么子进程不继承父进程的工作目录。好吧,如果您将 NULL 传递给 CreateProcess,那么新进程将在调用 CreateProcess 时继承父进程的工作目录。文档清楚地说明了这一点,这里没有任何意外。CreateProcess 的行为与宣传的完全一样。

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

为了将来参考,我建议您在提问时包含任何错误的完整详细信息。您说引发了异常,但实际上您需要提供任何异常的全部详细信息。

于 2013-05-28T15:38:24.617 回答