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