c++ - 创建和修改系统路径变量

标签 c++ boost

我正在使用 Boost 库创建一个 C++ 应用程序,所以我已经开发了模块但卡在了这里。

我想使用 boost 库创建和修改系统变量(或即使在进程终止后仍然存在的局部环境变量)。 有这样的方法

setenv() putenv() getenv()

但是他们进行了本地更改,并且在进程终止后该值消失了。

那不是真正的问题。当我想要在 linux 和 mac 平台上运行相同的代码时,真正的问题出现了。

  1. 我可以使用 C++ 和可以创建、修改和删除路径变量的库来制作跨平台代码吗? 如果不是
  2. 我可以为具有上述要求的特定平台(例如 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/

相关文章:

boost - 使用 Boost 1.68/LLVM/VS2017 时出现 "is_assignable"错误

c++ - 使用自动引用类在 C++ 中创建堆栈时出现问题

c++ - Lex 解析器 : (end of buffer or a NUL) segfault

c++ - 如何将 mpl::transform 应用于 mpl::string?

python - 将 C++ Boost 正则表达式转换为 Python 正则表达式

c++ - 使用 SCons 跨平台构建 Boost

c++ - 如何将 C++ union 转换为 Delphi

c++ - MSVC 的虚方法崩溃

c++ - 重载运算符 << 时出现链接错误

c++ - 使用 boost::asio::deadline_timer 实现通用 Timer 类时遇到问题