[英]Execute a Windows command with a controled environment in C++
我目前正在嘗試在Windows下的C ++ 11中執行命令,並且希望環境為我手動設置的字符**。
我看到了popen(),system()和CreateProcess()函數,但是用這些函數無法實現。 我正在尋找的是UNIX exec *函數的替代方法,它使我們能夠精確地運行環境。
您需要CreateProcess
的lpEnvironment
參數:
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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.