如何在C ++中添加环境变量?

时间:2011-03-09 12:50:45

标签: c++ windows environment-variables

有什么方法可以通过C ++在Windows中添加环境变量?

必须在“我的电脑 - >属性 - >高级 - >环境变量”中添加它们

谢谢

6 个答案:

答案 0 :(得分:10)

来自MSDN

  

以编程方式添加或修改   系统环境变量,添加它们   到了   然后是HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment注册表项   广播WM_SETTINGCHANGE消息   将lParam设置为字符串   “环境”。这允许   应用程序,如shell,to   拿起你的更新......

答案 1 :(得分:3)

我知道的唯一方法是通过注册表。

提示,全局变量位于HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment以及HKEY_USERS\*\Environment中每个用户的变量,其中*表示用户的SID。

祝你好运。

答案 2 :(得分:1)

这是一个简单的实现(基于SteelBytes发布的MSDN指令):

bool SetPermanentEnvironmentVariable(LPCTSTR value, LPCTSTR data)
{
    HKEY hKey;
    LPCTSTR keyPath = TEXT("System\\CurrentControlSet\\Control\\Session Manager\\Environment");
    LSTATUS lOpenStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE, keyPath, 0, KEY_ALL_ACCESS, &hKey);
    if (lOpenStatus == ERROR_SUCCESS) 
    {
        LSTATUS lSetStatus = RegSetValueEx(hKey, value, 0, REG_SZ,(LPBYTE)data, strlen(data) + 1);
        RegCloseKey(hKey);

        if (lSetStatus == ERROR_SUCCESS)
        {
            SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment", SMTO_BLOCK, 100, NULL);
            return true;
        }
    }

    return false;
}

答案 3 :(得分:0)

答案 4 :(得分:0)

#include <iostream>
#include <windows.h>
#include <cstring>
#include "tchar.h"


void SetUserVariablePath(){
    HKEY hkey;
    long regOpenResult;
    const char key_name[] = "Environment";
    const char path[]="D:/custom_command";                                               //new_value path need to update 
    regOpenResult = RegOpenKeyEx(HKEY_CURRENT_USER,key_name, 0, KEY_ALL_ACCESS, &hkey);
    LPCSTR stuff = "VVS_LOGGING_PATH";                                                   //Variable Name 
    RegSetValueEx(hkey,stuff,0,REG_SZ,(BYTE*) path, strlen(path));
    RegCloseKey(hkey);
}



void GetUserVariablePath(){
    static const char path[] = "VVS_LOGGING_PATH" ;                                      //Variable Name 
    static BYTE buffer1[1000000] ;
    DWORD buffsz1 = sizeof(buffer1) ;
    {
        //HKEY_CURRENT_USER\Environment
        const char key_name[] = "Environment";
        HKEY key ;

        if( RegOpenKeyExA( HKEY_CURRENT_USER, key_name, 0, KEY_QUERY_VALUE, std::addressof(key) ) == 0 &&
            RegQueryValueExA( key, path, nullptr, nullptr, buffer1, std::addressof(buffsz1) ) == 0 )
        {
            std::cout << "The updated value of the user variable is :  " << reinterpret_cast<const char*>(buffer1) << '\n' ;
        }
    }
}

int main()
{   
    SetUserVariablePath();
    GetUserVariablePath();
    return 0;
}

答案 5 :(得分:-1)

Windows中的环境变量存储在Windows注册表中。您可以使用“SetEnvironmentVariable”功能,请参阅下面链接中的功能文档。

http://msdn.microsoft.com/en-us/library/96xafkes.aspx