[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
30# ▄︻┻═┳一


重启explorer之后,还需要重启cmd
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

31# Batcher


这个我当然知道,重启exploer后再重启cmd.exe N*N 也 不会读取环境变量。

至少得注销一次系统才可以“刷新”系统环境变量。

TOP

32# ▄︻┻═┳一
我得承认关于explorer.exe环境空间的部分内容
写得是过于随意了些
虽然改过一次
仍然不是很满意

“只是需要重新启动explorer.exe才能刷新到它的环境空间中”
这句话未将问题的本质描述清楚
应用程序的环境空间有继承特性
这句话同样适用于explorer.exe以及其他应用程序
在你使用“任务管理器”结束exploer.exe时
应该知道“任务管理器”的进程位于进程树
System->smss.exe->winlogon.exe->taskmgr.exe
而修改注册表中的环境变量不会对这些进程的环境空间产生影响
那么使用taskmgr.exe启动的explorer.exe自然不会继承到新变量

而注销后重新登录或者系统重启
是由userinit.exe启动的explorer.exe
而userinit.exe的主要作用就是读取计算机和用户配置
包括环境变量
那自然会从注册表中抓取到新的变量
再被它的子进程explorer.exe所继承

我原文中的重启explorer.exe
是在这样的测试条件下成功的
打开cmd.exe
set _newvar=value设置一个新变量
taskkill /im:explorer.exe /f杀掉当前的explorer.exe进程
start explorer.exe启动一个心得explorer.exe进程
这个新进程作为cmd.exe的子进程
自然会继承cmd的环境空间
其中就包括新定义的变量_newvar

不知道这样说你是否清楚了?
1

评分人数

天的白色影子

TOP

本帖最后由 qzwqzw 于 2011-5-6 17:17 编辑

05-06修订

  • 增加Windows环境变量的注册表存储位置
  • 修改explorer.exe下修改环境变量的说明
天的白色影子

TOP

33# qzwqzw


将explorer作为cmd的子进程,这个方法我咋没想到呢...

TOP

System->smss.exe->winlogon.exe->taskmgr.exe
这条见解很独到,非常深刻,学习了!

TOP

33# qzwqzw

谢谢,你很认真。

我只是喜欢严谨

TOP

32# ▄︻┻═┳一


往注册表里面写一个环境变量,重启explorer和cmd,新的cmd里面无法识别这个环境变量?你的测试环境是?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

38# Batcher

我是用xp sp3 如下测试的:

注册表添加 环境变量 test:
cmd中 执行 “reg add HKCU\Environment\ /v test /d 1234567890”

然后任务管理器结束掉explorer.exe,cmd.exe

关掉任务管理器

ctrl+alt+delete 打开任务管理器, 文件》新建任务(运行),输入explorer,

再在运行中输入cmd

在cmd中输入set test
  1. 显示“环境变量 test 没有定义”
复制代码

TOP

1# qzwqzw


很好。。。

TOP

没看明白~~~
修改注册表设置我采用.inf文件,执行用
  1. rundll32 setupapi,InstallHinfSection DefaultInstall 132 .\*.inf
复制代码
结束用资源管理器用
  1. taskkill.exe /im explorer.exe /f
复制代码
刷新用
  1. gpupdate /force
复制代码
  1. RunDll32.exe USER32.DLL,UpdatePerUserSystemParameters
复制代码
重新新启动资源管理器
  1. start explorer.exe
复制代码
注册表修改生效 (xpsp2 xpsp3 2003通过)
1

评分人数

TOP

39# ▄︻┻═┳一


不试试41楼的方法?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

此文对cmd 环境变量分析总结的比较透彻,谢谢LZ

顺便问下 set,这个是怎么发现的呢? 以前从来没见过


hanyeguxing 斑竹
对NT内核了如指掌啊,佩服

TOP

41# temp
测试了一下
因为没有现成的inf文件
直接regedit修改HKEY_CURRENT_USER\Environment下的已有变量
然后杀进程、刷新、启进程
结果无效!

另外印象中有直接刷新当前Explorer.exe环境空间的命令行
似乎也是用的rundll32
可惜找不到了
天的白色影子

TOP

本帖最后由 caruko 于 2011-5-17 22:34 编辑

一般来说,子进程都会继承父进程的环境变量。
start /I 命令也可以放弃继承,使用新环境,也就是初始环境。

有一次使用bat来做open vpn密码验证程序,发现OPENVPN的登陆密码和用户名是以环境变量的形式存在的,这样方便调用外部程序传递一些数据。
当时还担心过它的安全,后来查了一些资料才了解。

TOP

返回列表