我正在使用Boost Library创建一个C ++应用程序,所以我已经开发了模块,但仍然存在。
我想使用boost库创建和修改系统变量(或者即使在进程终止后仍然存在的本地环境变量)。 有像
这样的方法SETENV() putenv()函数 GETENV()
但它们会进行局部更改,并且在进程终止后值会消失。
那不是真正的问题。当我希望在linux和mac平台上运行相同的代码时,真正的问题就出现了。
截至目前,我有这个代码为Windows设置环境变量,但它给出了错误
#include <string>
#include <iostream>
#include <boost/asio.hpp>
#include <boost/iostreams/device/file_descriptor.hpp>
#include <boost/iostreams/stream.hpp>
#include <process/boost/process.hpp>
#include <boost/filesystem/path.hpp>
#include <boost/system/error_code.hpp>
namespace bp = boost::process;
namespace bpi = boost::process::initializers;
namespace bio = boost::iostreams;
int main()
{
char* str="SETX Name Value";
bp::pipe p = bp::create_pipe();
{
bio::file_descriptor_sink sink(p.sink, bio::close_handle);
boost::filesystem::path p("C:/Windows/System32/cmd.exe");
boost::system::error_code ec;
bp::windows::execute(bpi::run_exe(p),
bpi::set_cmd_line(str),
bpi::bind_stdout(sink),
bpi::set_on_error(ec)
);
}
bio::file_descriptor_source source(p.source, bio::close_handle);
bio::stream<bio::file_descriptor_source> is(source);
std::string s;
is >> s;
std::cout << s << std::endl;
std::cin.get();
return 0;
}
答案 0 :(得分:1)
这与Boost没什么关系,实际上很少与环境变量有关。
它与系统配置有关。
因此,如果您具有更改用户/系统环境所需的权限,则可以使用这些方法来进行更改:
大多数示例都喜欢使用Windows Scripting Host,PowerShell和.NET等工具来完成这项工作:
但如果必须的话,你可以把它翻译成C ++。
PS。在Linux上,您可以更改/etc/profile
,/etc/default/...
等文件。