【问题标题】:Use CreateProcess with environment variables set via a bat file将 CreateProcess 与通过 bat 文件设置的环境变量一起使用
【发布时间】:2012-03-24 02:20:22
【问题描述】:

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

【问题讨论】:

    标签: c++ delphi winapi


    【解决方案1】:

    如果初始 createprocess 批处理文件只是设置环境变量,则创建环境变量块并直接通过 CreateProcess() 调用传递。

    此处提供了一些示例代码,用于获取/设置环境变量以及将块传递给 CreateProcess() http://www.delphidabbler.com/articles?article=6

    【讨论】:

      【解决方案2】:

      您可以使用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, ...);
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多