分享

Windows环境变量编程设定

 322yangxinxing 2012-01-11

Windows环境变量编程设定

分类: VC 1142人阅读 评论(0) 收藏 举报

 转贴:http://blog.csdn.net/talker/archive/2004/07/28/54175.aspx

 

 

 

本文由浅入深的讲解环境变量的定义、使用。对Win98WinMeNTXPWin2003的不同系统下的应用进行了全面的分析。并以编程方式实现设置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系列设置环境变量的方式不同,详情见下节:设定环境变量的算法

三 设定环境变量的算法:

对于对Win98WinMeNTXPWin2003一揽子操作系统,可以分为两类:win98系列,NT系列。它们设定系统环境变量有着本质的不同。但对于设置当前进程的环境变量是一样的。

A 关于系统环境变量

1win98系列设定系统环境变量的算法:

    熟悉win98的都清楚,在C盘一般都有一个“AutoExec.bat”文件,系统启动都要执行它,所以这里是设定系统环境变量的地方,添加一个环境变量只是添加一行

SET PATH=C:/FOLDER1/FOLDER2类似的语句。如果添加一个路径,那么就是类似的语句

SET PATH=C:/FOLDER1/FOLDER2;D:/FOLDER3 。系统要重新启动更改才能有效。

2NT系列的设定系统环境变量的算法:

    首先分析手动编辑环境变量的原理,通过阅读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就限于GetEnvironmentVariableSetEnvironmentVariableGetEnvironmentStringsSetEnvironmentStrings

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多