您的位置:首页 > 编程语言

Windows环境变量编程设定

2004-07-28 11:30 274 查看
Windows环境变量编程设定

本文由浅入深的讲解环境变量的定义、使用。对Win98、WinMe、NT、XP、Win2003的不同系统下的应用进行了全面的分析。并以编程方式实现设置Windows环境变量。这对于一般程序编制和软件安装程序编制都有重要的意义。

一 什么是用户环境变量、什么是系统环境变量:
环境变量的定义(参考msdn):环境变量是一个string组成的array。它是计算机的一系列设置(setting),环境变量用以指定文件的搜索路径、临时文件目录、特定应用程序(application-specific)的选项和其他类似信息。默认情况下,每个进程(process)的环境变量拷贝自父进程。当然父进程也能够为子进程指定不同的环境变量。
环境变量控制着多种程序的行为。例如,TEMP 环境变量指定程序放置临时文件的位置。任何用户都可以添加、修改或删除用户的环境变量。但是,只有管理员才能添加、修改或删除系统环境变量。使用“控制面板”中的“系统”可以自定义下列变量:(1)用于 登陆用户名(logged_on_user_name) 的用户环境变量;对于特定计算机的每个用户来说,用户环境变量是不同的。变量包括由用户设置的任何内容,以及由应用程序定义的所有变量,例如应用程序文件的路径。(2)系统环境变量 ;管理员可以更改或添加应用到系统(从而应用到系统中的所有用户)的环境变量。安装期间,Windows安装程序配置默认的系统变量,例如 Windows 文件的路径。
二 用户环境变量的作用、系统环境的作用:
举例往往是说明一个问题的最好办法,在Win2000下,我们观察“PATH”这个环境变量,
PATH= %SystemRoot%/system32。但是 “SystemRoot”又是一个环境变量, SystemRoot =d:/winnt,所以环境变量“TMP”的最终表征的路径为“d:/winnt/SYSTEM32”.如我们手动编辑系统环境变量PATH。修改后PATH=%SystemRoot%/system32;C:/ Program Files。然后设计一个代码,实现浏览器打开目录“C:/Program Files”。这仅涉及一个简单的ShellExecute API:
ShellExecute(NULL, "explore", "Internet Explorer",NULL, "c://Program Files", SW_SHOWNORMAL);
等价于
ShellExecute(NULL,"explore","Internet Explorer",NULL,"%path%",
SW_SHOWNORMAL);
但是后者有很大的灵活性,不修改代码只修改环境变量path的就能完成新的功能。这对于软件安装程序有着很好的意义。熟练的应用环境变量,有助于写出灵活、模块化的软件。
以上虽然以Win2000为例讲解,但同样适用于其他Windows系统,只是win98系列设置环境变量的方式不同,详情见下节:设定环境变量的算法。
三 设定环境变量的算法:
对于对Win98、WinMe、NT、XP、Win2003一揽子操作系统,可以分为两类:win98系列,NT系列。它们设定系统环境变量有着本质的不同。但对于设置当前进程的环境变量是一样的。
A 关于系统环境变量
1)win98系列设定系统环境变量的算法:
熟悉win98的都清楚,在C盘一般都有一个“AutoExec.bat”文件,系统启动都要执行它,所以这里是设定系统环境变量的地方,添加一个环境变量只是添加一行
SET PATH=C:/FOLDER1/FOLDER2类似的语句。如果添加一个路径,那么就是类似的语句
SET PATH=C:/FOLDER1/FOLDER2;D:/FOLDER3 。系统要重新启动更改才能有效。
2)NT系列的设定系统环境变量的算法:
首先分析手动编辑环境变量的原理,通过阅读MSDN文档,发现系统其实在注册表
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment
保存系统环境变量,当手动修改完毕时,选择“确定”按钮退出,向系统所有上级窗口发送WM_SETTINGCHANGE消息。系统不需要重新启动。

[插曲]:如何向系统所有上级窗口发送WM_SETTINGCHANGE消息?我仔细观看MSDN代码也没有给出一个例子。只能自己想办法,我编写了一个程序专门接受发送给它的WM_SETTINGCHANGE的消息,代码如下:
OnSettingChange(UINT uFlags, LPCTSTR lpszSection){….}
然后手动修改系统环境变量,这是程序接收到消息,分析uFlags, lpszSection两个参数,得知uFlags=0, lpszSection=”Environment”;
然后模仿该消息,向系统所有上级窗口发送WM_SETTINGCHANGE消息。
B 关于当前的进程的环境变量
这个范围的环境变量很简单,进程执行时该变量有效,退出时就失效。所涉及的API就限于GetEnvironmentVariable、SetEnvironmentVariable、GetEnvironmentStrings、SetEnvironmentStrings等。
四 设定环境变量的编程实现:
邮件:charnquan@163.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息