我有一个非常古老的大项目,在模拟过程中调用不同的 EXE 文件。所有这些都放在一个文件夹中。现在,文件夹目录在路径环境变量中,但不幸的是我不得不从那里删除它。
有没有办法将文件夹添加到进程正在搜索文件的列表中?我知道它可以通过 SetDllDirectory 为 DLL 完成,但这对 EXE 不起作用。
如果做不到,是否可以更改线程(而不是进程)的工作目录?
最佳答案
启动新进程 (EXE) 时,Windows 会为启动的新进程创建父进程环境变量缓冲区的拷贝。因此,对启动进程的环境变量的所有更改都不会影响父进程的环境变量。换句话说,Windows 使用 malloc + memcpy 为启动的进程创建一个新的环境变量表。
所以在你的应用程序中你可以使用GetEnvironmentVariable加载 PATH 的本地拷贝的字符串值。
接下来检查此字符串是否已经包含包含要调用的 EXE 的目录路径(来自您的应用程序的先前调用)。如果 PATH 已包含此路径,则无需执行任何操作。
否则检查 PATH 字符串是否已经以分号结尾。如果不是这种情况,请附加一个分号。然后附加包含要调用的 EXE 的目录的路径。最后,使用 SetEnvironmentVariable 通过更新的字符串更新环境变量 PATH 的进程拷贝.
看看 Changing Environment Variables示例代码。
现在只为您的应用程序(进程)更新 PATH 环境变量,调用或启动其他可执行文件应该可以工作。
关于C++添加包含文件的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24990634/