Windows环境变量编程设定

原创 2004年07月28日 11:30:00

Windows环境变量编程设定

 

本文由浅入深的讲解环境变量的定义、使用。对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等。

四 设定环境变量的编程实现:

邮件:charnquan@163.com 

 

 

 

 

 

 

 

 

 

 

 

 

程序修改Windows环境变量生效

修改Windows环境变量生效bruce | 五月 27,2005 12:37http://blog.9zi.com/post/1/805 不少程序需要添加各自的环境变量,方便定制性使用。用得最多的...
  • Jans
  • Jans
  • 2006-06-15 18:58:00
  • 8274

基于visual c++之windows核心编程代码分析(21)获取和设置环境变量

环境变量是一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如path,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path...
  • flyingleo1981
  • flyingleo1981
  • 2016-12-09 20:26:05
  • 601

windows环境变量(一)

%appdata%就代表了C:Users\用户名\AppData\Roaming这个文件夹。“%”是系统变量的一种表示方法,在升级补丁或者软件需要将某些内容写入系统文件夹时,都是用的这种写法,可以准确...
  • a17346521559
  • a17346521559
  • 2017-08-11 23:20:02
  • 77

Windows环境变量编程设定

Windows环境变量编程设定 本文由浅入深的讲解环境变量的定义、使用。对Win98、WinMe、NT、XP、Win2003的不同系统下的应用进行了全面的分析。并以编程方式实现设置Windows环境变...
  • talker
  • talker
  • 2004-07-28 11:30:00
  • 4432

WinPcap编程【1】--编程环境的设置

vs2008.1、安装winpcap官网下载地址http://www.winpcap.org/install/bin/WinPcap_4_1_1.exe 安装so easy,不多说了。2、下载WinP...
  • wu_huiwen
  • wu_huiwen
  • 2010-04-10 15:06:00
  • 7386

DumpEnvStrings.cpp(获取环境变量)

#include #include #include // 使用了StringCbCopyN等安全字符串处理函数 void DumpEnvStrings() { // 结尾有两个'\0',一...
  • u012786754
  • u012786754
  • 2014-12-07 09:59:33
  • 392

windows 7下设置环境变量

 在XP等其它操作系统上的操作本文就不说了,在这里只谈一下在win7环境下的操作。 方法一:在命令提示符下操作(同XP)。“开始”---“cmd”---"回车",出现命令行模式。在命令提示符下输入“s...
  • eric_jjc
  • eric_jjc
  • 2010-03-13 22:53:00
  • 43748

CUDA在Windows下的软件开发环境搭建

http://www.cnblogs.com/yaoyuanzhi/archive/2010/11/13/1876215.html CUDA在Windows下的软件开发环境搭建  本文...
  • sunmenggmail
  • sunmenggmail
  • 2014-10-16 15:41:35
  • 3637

编程中改变环境变量

exec系统调用执行新程序时会把命令行参数和环境变量表传递给main函数。 环境变量表是一组字符串char ** environ,主要成员有 PATH:可执行文件搜索路径。 SHE...
  • luteresa
  • luteresa
  • 2017-03-29 10:47:09
  • 273

ExpandEnvironmentStrings 函数

ExpandEnvironmentStrings 函数 扩展环境变量字符串,并使用当前用户定义的值来替换这些环境变量字符串。如果要为特定的用户或系统指定环境块,请使用Expa...
  • xlf13872135090
  • xlf13872135090
  • 2012-11-29 10:34:19
  • 6076
收藏助手
不良信息举报
您举报文章:Windows环境变量编程设定
举报原因:
原因补充:

(最多只允许输入30个字)