Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.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++ 使用CreateProcess,通过bat文件设置环境变量_C++_Delphi_Winapi - Fatal编程技术网

C++ 使用CreateProcess,通过bat文件设置环境变量

C++ 使用CreateProcess,通过bat文件设置环境变量,c++,delphi,winapi,C++,Delphi,Winapi,我正在使用函数执行一个外部应用程序,为了执行这样的应用程序,我需要在设置一些环境变量之前运行一个.bat文件。问题是当我调用CreateProcess运行bat文件,然后再次执行CreateProcess运行外部应用程序时,不会使用环境变量。问题是,当我第二次执行CreateProcess函数时,如何使用bat文件中设置的环境变量?如果从批处理文件执行其他应用程序,则会设置这些环境变量。您可以将可执行文件名作为参数传递给批处理文件。在批处理文件中设置环境变量时,它们仅在该批处理文件退出之前存在

我正在使用函数执行一个外部应用程序,为了执行这样的应用程序,我需要在设置一些环境变量之前运行一个.bat文件。问题是当我调用
CreateProcess
运行bat文件,然后再次执行
CreateProcess
运行外部应用程序时,不会使用环境变量。问题是,当我第二次执行
CreateProcess
函数时,如何使用bat文件中设置的环境变量?

如果从批处理文件执行其他应用程序,则会设置这些环境变量。您可以将可执行文件名作为参数传递给批处理文件。在批处理文件中设置环境变量时,它们仅在该批处理文件退出之前存在

如果初始createprocess批处理文件仅用于设置环境变量,请创建环境变量块,并通过createprocess()调用直接传递它


此处提供了一些示例代码,用于获取/设置环境变量以及将块传递给CreateProcess()

您可以使用
CreateProcess()
运行操作系统的
cmd.exe
程序,一次执行多个命令,例如:

TCHAR szCmd[(MAX_PATH * 3) + 16] = {0};
TCHAR szPathToCmdExe[MAX_PATH+1] = {0}
GetEnvironmentVariable(TEXT("COMSPEC"), szPathToCmdExe, MAX_PATH+1);
wsprintf(szCmd, TEXT("\"%s\" /C \"%s && %s\""), szPathToCmdExe, szPathToBat, szPathToProgram);
CreateProcess(NULL, szCmd, ...);