有没有办法通过C++在Windows中添加环境变量?
它们必须添加在“我的电脑->属性->高级->环境变量”中
谢谢
有没有办法通过C++在Windows中添加环境变量?
它们必须添加在“我的电脑->属性->高级->环境变量”中
谢谢
来自MSDN:
要以编程方式添加或修改系统环境变量,请将其添加到
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment
注册表键中,然后广播一个带有lParam
设置为字符串"Environment"的WM_SETTINGCHANGE
消息。这允许应用程序(如shell)获取您的更新...
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;
}
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
中,每个用户的变量在HKEY_USERS\*\Environment
中,其中*
代表用户的SID。你尝试过在C++中设置本地环境变量吗?
#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;
}