我正在使用 Boost 库创建一个 C++ 应用程序,所以我已经开发了模块但卡在了这里。
我想使用 boost 库创建和修改系统变量(或即使在进程终止后仍然存在的局部环境变量)。 有这样的方法
setenv() putenv() getenv()
但是他们进行了本地更改,并且在进程终止后该值消失了。
那不是真正的问题。当我想要在 linux 和 mac 平台上运行相同的代码时,真正的问题出现了。
- 我可以使用 C++ 和可以创建、修改和删除路径变量的库来制作跨平台代码吗? 如果不是
- 我可以为具有上述要求的特定平台(例如 Windows)编写代码吗?
到目前为止,我有这段代码可以为 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;
}
最佳答案
这与 Boost 无关,实际上与环境变量无关。
它与系统配置有关。
因此,如果您具有更改用户/系统环境所需的权限,您可以使用这些方法来使更改生效:
大多数示例都支持使用 Windows Scripting Host、PowerShell 和 .NET 等工具来完成这项工作:
但如果必须的话,您或许可以将它翻译成 C++。
附言。在 Linux 上,您需要更改一些文件,例如 /etc/profile
、/etc/default/...
等。
关于c++ - 创建和修改系统路径变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39913852/