环境变量是指那些可为系统所使用的包含有环境信息的字符串,根据级别的不同而分为系统环境变量和用户环境变量,并以此给出诸如文件搜索路径,存放临时文件的目录等与系统和用户相关的环境变量。下表列出了用于环境变量访问的函数。
环境变量访问函数
────────────────────────────────────
环境变量函数 函数说明
────────────────────────────────────
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 }
进程的环境变量是具有可继承性的,即在创建子进程时,是可以同时将环境变量传递给子进程的。在创建子进程的过程中,可以有父进程负责控制子进程,子进程可以继承那些环境变量,一旦子进程创建完毕,父进程即失去对子进程环境变量的控制。实际上,子进程从父进程继承来的环境变量只是父进程环境变量的一个副本,子进程对其环境变量的修改并不会影响到父进程。