System Internals提供了一些很好用的小工具,如Process Explorer, File Monitor, PsTools等等,在工作中我常常使用它们。
尤其是在trouble-shooting的时候,常常能够起到事半功倍的效果。
下面分享一下昨天使用Registry Monitor帮同事搞定设置环境变量的问题。
问题描述:同事L在用Wise做安装程序,安装程序一共有几个。其中一个是主安装程序,其他的姑且称为子安装程序吧。
主安装程序需要设置一个系统环境变量,然后子安装程序运行时需要读取这个系统环境变量的值。这个问题应该很简单吧?!
同事L看了看Wise的文档发现它只提到如何读环境变量但是没有设置的。于是L想做一个批处理(.bat)文件来设置该变量,文件内容
示例如下:
set MYENVVAR=TESTING_1
然后在Wise的脚本里边调用这个批处理文件。但是这样不解决问题,原因是:环境变量NAME是个临时性的,只在bat文件运行的进程生命期是存在的,
它不会影响到后续的进程或并行的其他进程。这个进程(可能是cmd.exe)结束后,变量NAME也就终结了。当然还有一种可能就是,这个进程如果开启
了子进程,子进程能够继承它的环境变量。但是这种子进程的方法对于L的问题显然不可行,因为没有办法将子安装程序作为批处理程序的子进程。
L上网搜索了半天,发现问这个问题的人还很多,但是没有什么简单的解决办法。(这也说明了互联网无效信息很多,有效信息却少的可怜,信息产业
还是大有前途地。)
L过来问我,我给L的建议是:用操作系统自带的“系统属性”来设置环境变量,同时打开Registry Monitor监视看看那个注册表项被修改了。L去试了试,
两分钟不到就搞定了。
设置Registry Monitor的Filter包涵变量名称:
点击OK设置该变量时,Registry Monitor的截图如下:
最前面的记录就是我们需要找的注册表项:
HKLM/System/CurrentControlSet/Control/Session Manager/Environment/MYENVVAR
找到这个项之后,L很快就用Wise读写注册表的功能搞定了这个问题。
小结:君子性非异也,善假于物也。合理地运用工具,让你的生活轻松很多。
Happy Programming!
相关链接:
1. RegMon for Windows v7.04
http://technet.microsoft.com/en-us/sysinternals/bb896652.aspx
2. System Internal (已经被微软收购了,更名为Windows Sysinternals)
http://technet.microsoft.com/en-us/sysinternals/default.aspx
镜像地址: