我有一个非常奇怪的问题。我正在开发一个在 Windows 下的C程序,它将数据写入临时目录。它使用GetTempFileName生成唯一名称。在将数据写入临时文件后,数据实际上是一个 exe ,我以CreateProcess开头。对于lpCurrentDirectory
param,我使用NULL
,因此使用父程序的当前工作目录成为子程序的工作目录。有所有需要的DLL。
在大多数计算机(XP,2003,7,8)上,一切都按预期工作。但是在一个特定的 Windows 7 上,当子程序启动时我会遇到异常。非常奇怪但是如果我将所有需要的DLL移动到临时目录,一切都按预期工作。
嗯,那么为什么不搜索父程序的工作目录?
非常感谢。
答案 0 :(得分:2)
您的原始问题询问为什么子进程不继承父进程的工作目录。好吧,如果将NULL传递给CreateProcess,那么新进程将在调用CreateProcess时继承父进程的工作目录。文档使这一点非常清楚,这里没有任何意外。 CreateProcess的行为与宣传的完全相同。
编辑过的问题主要集中在DLL搜索上。从这些信息中回答这个问题的新观点并不容易。最好的办法是在Dependency Walker的配置文件模式下运行程序。这应该揭示出了什么问题。您可能会发现问题根本不是您所期望的。
为了将来参考,我建议您在提出问题时包含任何错误的完整详细信息。您声明引发了异常,但实际上您需要提供任何例外的完整详细信息。