【发布时间】:2012-03-24 02:20:22
【问题描述】:
我正在使用CreateProcess 函数执行一个外部应用程序,为了执行这样的应用程序,我需要在设置一些环境变量之前运行一个 .bat 文件。问题是当我调用CreateProcess 来运行bat 文件,然后再次执行CreateProcess 来运行外部应用程序时,没有使用环境变量。问题是当我第二次执行CreateProcess函数时,如何使用bat文件中设置的环境变量?
【问题讨论】:
我正在使用CreateProcess 函数执行一个外部应用程序,为了执行这样的应用程序,我需要在设置一些环境变量之前运行一个 .bat 文件。问题是当我调用CreateProcess 来运行bat 文件,然后再次执行CreateProcess 来运行外部应用程序时,没有使用环境变量。问题是当我第二次执行CreateProcess函数时,如何使用bat文件中设置的环境变量?
【问题讨论】:
如果初始 createprocess 批处理文件只是设置环境变量,则创建环境变量块并直接通过 CreateProcess() 调用传递。
此处提供了一些示例代码,用于获取/设置环境变量以及将块传递给 CreateProcess() http://www.delphidabbler.com/articles?article=6
【讨论】:
您可以使用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, ...);
【讨论】:
如果您从批处理文件执行其他应用程序,它将设置这些环境变量。您可以将可执行文件名称作为参数传递给批处理文件。在批处理文件中设置环境变量时,它们仅在该批处理文件退出之前存在。
【讨论】: