【问题标题】:How can I set PATH variable using QT?如何使用 QT 设置 PATH 变量?
【发布时间】:2013-07-05 13:50:59
【问题描述】:

如何使用 QT 4.8 获取和设置 PATH 变量?我知道我可以使用 getenv 从 STL 获取 PATH 变量值,但不知道如何使用 STL 或任何基于 Qt 的方法设置它?

如果 QT 有它的功能,我想知道并使用它,而不是去使用它的 Windows API。

【问题讨论】:

    标签: c++ qt4 environment-variables


    【解决方案1】:

    感谢我的朋友Toosi先生,您可以使用qputenv("key", "value")为当前进程设置环境变量,并使用qgetenv("key")获取它。
    这也适用于 Qt 5.5.0 :)

    【讨论】:

      【解决方案2】:

      您可以使用 stdlib.h 中的 setenv 将 PATH 设置为新值。

      setenv("PATH","/new/path/value",1)
      

      但是,这是标准标头的非标准扩展,只会影响调用进程产生的子进程。为了更改所有新进程的环境变量,必须使用系统特定的方法。对于 Windows,PATH 变量可以在

      HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment
      

      注册表项。这将确保为所有新进程设置 PATH,并将在重新启动时应用。

      【讨论】:

      • 非常感谢 :) 我不知道我们在 STL 有 setenv!。但是你知道我们是否有一些基于 Qt 的东西吗?如果没有类似的东西,我接受他的回答。
      • 看来您可以使用QProcessEnviroment 设置使用QProcess 生成的进程的环境。
      • 谢谢,我需要机器范围的权限(我的意思是与整个操作系统有关,而不是进程本身)它还能让我继续前进吗?
      • 如果您需要在系统范围内更改 PATH,那么您需要使用 Windows API 将所需的更改添加到 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment registry key,这将更改任何推出了新的应用程序。您所做的更改也将在重新启动后继续存在。
      • 谢谢,那么您会将最后一条评论也添加到答案中吗?并且还提到 _putenv() (因为 setenv 似乎不在标准标题中!找不到它!)
      【解决方案3】:

      我使用此代码处理 Registry 值:

      包括:

      #include <windows.h>
      

      阅读:

      QSettings setting( "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment", QSettings::NativeFormat );
      QString pathVal = setting.value("Path", "no-path").toString();
      

      要写:

      setting.setValue( "Path", path );
      SendMessageA( HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment" );
      

      通过这种方式,我无需重新加载程序即可获得实际的Path 值,并将该值广播到所有进程。

      无法从这个答案中首先意识到如何使用SendMessage
      How to modify the PATH variable definitely through the command line in Windows
      我想我应该在 Visual Studio 中创建一个Win32 应用程序,然后在其中发送此消息。

      但是这个函数应该在注册表改变之后被调用。所以我可以手动编辑注册表值,然后按下一个名为SendMessageAPath 更新的按钮。


      顺便说一句,SendMessage 宏调用了SenMessageW 函数,但它不起作用,Path 没有改变。不知道A 是什么意思,但它改变了变量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-09
        • 1970-01-01
        • 2023-04-06
        • 2014-07-30
        • 2014-02-01
        • 2014-11-13
        • 1970-01-01
        • 2015-10-26
        相关资源
        最近更新 更多