簡體   English   中英

在C ++中的受控環境下執行Windows命令

[英]Execute a Windows command with a controled environment in C++

我目前正在嘗試在Windows下的C ++ 11中執行命令,並且希望環境為我手動設置的字符**。

我看到了popen(),system()和CreateProcess()函數,但是用這些函數無法實現。 我正在尋找的是UNIX exec *函數的替代方法,它使我們能夠精確地運行環境。

您需要CreateProcesslpEnvironment參數:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM