我目前正在尝试在Windows下的C ++ 11中执行命令,并且希望环境为我手动设置的char **。

我看到了popen(),system()和CreateProcess()函数,但是用这些函数无法实现。
我正在寻找的是UNIX exec *函数的替代方法,它使我们能够精确地运行环境。

最佳答案

您需要lpEnvironmentCreateProcess参数:


  lpEnvironment [in,可选]
  
  指向新进程的环境块的指针。如果此参数为NULL,则新进程将使用调用进程的环境。
  
  一个环境块由一个以null结尾的以null结尾的字符串的块组成。每个字符串的格式如下:
  
  名称=值\ 0


例:

// example for storing environment variables dynamically
std::map<std::string, std::string> env = { {"name1", "value1"}, {"name2", "value2"} };

// example for generating block of strings
std::vector<char> envBlock;
std::for_each(env.begin(), env.end(),
    [&envBlock](const std::pair<std::string, std::string> & p) {
        std::copy(p.first.begin(), p.first.end(), std::back_inserter(envBlock));
        envBlock.push_back('=');
        std::copy(p.second.begin(), p.second.end(), std::back_inserter(envBlock));
        envBlock.push_back('\0');
    }
);
envBlock.push_back('\0');

// feed this into ::CreateProcess()
LPVOID lpEnvironment = (LPVOID)envBlock.data();

关于c++ - 使用C++在受控环境中执行Windows命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35041853/

10-14 16:29
查看更多