2011-03-09 87 views
4

有什麼辦法可以通過C++在Windows中添加環境變量?如何在C++中添加環境變量?

他們必須在加入「我的電腦 - >屬性 - >高級 - >環境變量」

謝謝

+2

可能重複(HTTP://計算器.com/questions/1919125/programmatically-adding-a-directory-to-windows-path-environment-variable) – Joe

+0

[在C++中設置本地環境變量]的可能重複(http://stackoverflow.com/questions/899517/ set-local-environment-variables-in-c) – Aamir

+1

@Aamir:OP說「在Windows中」。您的鏈接僅用於正在運行的進程。另請參閱Felice Pollano的回覆,該回復使得相同(IMO錯誤)的假設。 – 0xC0000022L

回答

10

MSDN

以編程方式添加或修改 系統環境變量,將它們添加 到 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment註冊表項,然後 廣播WM_SETTINGCHANGE消息 與lParam設置爲字符串 「環境」 。這使得 應用,如外殼, 拿起你更新...

+0

有沒有其他方式沒有使用註冊表? – Ram

+0

@ code9215:不是,但如果你找到一個,你應該寫一個答案。 – 0xC0000022L

3

我所知道的唯一方法是通過註冊表。

提示全局變量在HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\EnvironmentHKEY_USERS\*\Environment中的每個用戶的全局變量,其中*表示用戶的SID。

祝你好運。

+0

經過我自己的獨立研究後,我發現這是最簡單的機制。請記住,在更新路徑環境變量之前存在的每個進程可能會或可能不會響應您應該在更新之後發送的消息。意思是,這種改變可能只適用於新的流程。 –

-1

Windows中的環境變量存儲在Windows註冊表中。您可以使用「SetEnvironmentVariable」函數來實現此目的,請參閱下面鏈接中的函數文檔。

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

+1

他想要全局設置變量;此功能僅適用於當前進程。 – SLaks

+0

我想你還沒有閱讀函數的文檔。該功能可以設置「過程」或「用戶」或「機器」的變量。你可以在機器級別通過傳遞targer = EnvironmentVariableTarget.Machine – Tayyab

+0

這是一個C#函數;他問的是C++。 – SLaks

0

下面是一個簡單的實現(基於發表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; 
} 
的[編程添加目錄到Windows PATH環境變量]