Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;添加包含文件的文件夹_C++_Windows_Exe - Fatal编程技术网

C++ C++;添加包含文件的文件夹

C++ C++;添加包含文件的文件夹,c++,windows,exe,C++,Windows,Exe,我有一个非常古老的大型项目,在模拟过程中调用不同的EXE文件。所有文件都放在一个文件夹中。目前,文件夹目录位于path env变量中,但不幸的是,我不得不将其删除 是否有方法将文件夹添加到进程正在搜索文件的列表中?我知道SetDllDirectory可以为DLL完成这项工作,但这不适用于EXE 如果无法执行此操作,是否可以更改线程(而不是进程)的工作目录?在启动新进程(EXE)时,Windows会为启动的新进程创建父进程的环境变量缓冲区副本。因此,对已启动流程的环境变量的所有更改对父流程的环境变

我有一个非常古老的大型项目,在模拟过程中调用不同的EXE文件。所有文件都放在一个文件夹中。目前,文件夹目录位于path env变量中,但不幸的是,我不得不将其删除

是否有方法将文件夹添加到进程正在搜索文件的列表中?我知道SetDllDirectory可以为DLL完成这项工作,但这不适用于EXE


如果无法执行此操作,是否可以更改线程(而不是进程)的工作目录?

在启动新进程(EXE)时,Windows会为启动的新进程创建父进程的环境变量缓冲区副本。因此,对已启动流程的环境变量的所有更改对父流程的环境变量没有影响。换句话说,Windows生成一个malloc+memcpy来为已启动的进程创建一个新的环境变量表

因此,在应用程序中,可以使用加载路径的本地副本的字符串值

接下来检查此字符串是否已经包含包含要调用的EXE的目录路径(来自应用程序的上一次调用)。如果路径已包含此路径,则无需执行任何操作

否则,请检查路径字符串是否已以分号结尾。如果不是这样,请附加分号。然后附加包含要调用的EXE的目录的路径。最后,通过使用更新的字符串更新环境变量路径的进程副本

看看示例代码


现在,只需更新应用程序(进程)的PATH环境变量,调用或启动其他可执行文件就可以了。

您可以使用
setlocal
仅修改父进程的PATH变量,使用
setlocal
创建一个小批量文件,
set PATH=which
,然后
myapp.exe
。这可以工作,但我不能这样做;/(我的应用被另一个通过DLL调用)你能用旧名称创建一个符号链接,指向合法路径中的某个新目录吗?