環境變量是指那些可為系統所使用的包含有環境信息的字符串,根據級別的不同而分為系統環境變量和用戶環境變量,并以此給出諸如文件搜索路徑,存放臨時文件的目錄等與系統和用戶相關的環境變量。下表列出了用于環境變量訪問的函數。
環境變量訪問函數
────────────────────────────────────
環境變量函數 函數說明
────────────────────────────────────
GreateEnvironmentBlock() 為特定的用戶創建一個環境塊
────────────────────────────────────
DestoryEnvironmentBlock() 釋放由CreateEnvironmentBlock()創建的環境塊
────────────────────────────────────
GetEnvironmentStrings() 得到當前進程的環境塊的地址
────────────────────────────────────
FreeEnvironmentStrings() 釋放由GetEnvironmentStrings()得到的環境塊
────────────────────────────────────
GetEnvironmentVariable() 得到指定環境變量的相關信息
────────────────────────────────────
SetEnvironmentVariable() 添加,修改或刪除一個指定的環境變量
───────────────────────────────────
注:環境塊是指與進程相關的,包含有環境變量名及其對應值的一個在進程地址空間內分配的內存塊。
下面的給出的代碼演示了對進程的環境變量進行讀,寫訪問的基本操作過程。
1 // 待操作的環境變量名
2 CString sEnvironmentName = "PUBLIC";
3 char cBuffer[256];
4
5 // 讀取環境變量信息
6 DWORD dwRet = GetEnvironmentVariable(sEnvironmentName, cBuffer, 256);
7 if (dwRet == 0)
8 {
9 // 如果環境變量不存在,則創建之
10 CString sEnvironmentValue("<進程的環境變量測試程序>");
11
12 BOOL bRet=SetEnvironmentVariable(sEnvironmentName,sEnvironmentValue);
13 if (bRet == TRUE) AfxMessageBox("環境變量設置完畢!");
14 else AfxMessageBox("環境變量設置失敗!");
15 }else{
16 // 如果環境變量存在,顯示環境變量內容
17 CString sMessage("環境變量PUBLIC值為:");
18 sMessage += CString(cBuffer);
19 AfxMessageBox(sMessage);
20 }
進程的環境變量是具有可繼承性的,即在創建子進程時,是可以同時將環境變量傳遞給子進程的。在創建子進程的過程中,可以有父進程負責控制子進程,子進程可以繼承那些環境變量,一旦子進程創建完畢,父進程即失去對子進程環境變量的控制。實際上,子進程從父進程繼承來的環境變量只是父進程環境變量的一個副本,子進程對其環境變量的修改并不會影響到父進程。