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