如何使用QT设置PATH变量?

时间:2013-07-05 13:51:00

标签: c++ qt4 environment-variables

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

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

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:3)

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

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

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

中更改PATH变量
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment

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

答案 2 :(得分:2)

我使用此代码处理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意味着什么,但它会改变变量。