我有一个很奇怪的问题。 我正在使用Windows下的C程序,将数据写入临时目录。 它使用GetTempFileName来生成一个唯一的名称。 数据实际上是一个exe数据写入临时文件后,我开始与CreateProcess 。 对于lpCurrentDirectory
param,我使用NULL
来使用父程序的当前工作目录成为子目录的工作目录。 有所有需要的DLL。
在大多数电脑上(XP,2003,7,8),一切都按预期工作。 但是在一个特定的Windows 7上,当子程序启动时,我会得到exception。 非常奇怪,但如果我将所有需要的DLL移动到临时目录,一切都按预期工作。
嗯,为什么父程序的工作目录没有被search的DLL?
非常感谢。
您原来的问题问为什么子进程不继承父级的工作目录。 那么,如果将NULL传递给CreateProcess,那么新进程将在调用CreateProcess时继承父进程的工作目录。 这个文档使得这个很清楚,这里没有什么惊喜。 CreateProcess的行为与广告一样。
编辑的问题集中在DLL搜索。 从这些信息来回答这个问题并不容易。 最好的办法是在Dependency Walker的配置文件模式下运行程序。 这应该揭示什么是错的。 你可能会发现问题根本不是你期望的。
为了将来的参考,我建议您在提问时包含任何错误的全部细节。 你说过例外,但你真的需要提供任何例外的全部细节。