|
多数声卡驱动最后都来一个PECMD FIND Explorer.EXE,KILL EXPLORER.EXE,再出现桌面后前面定义的系统级变量就会全部失效(可以进提示符用set命令查看),这个时候如果批处理或INI文件中用到前面定义的变量就会因找不到而出问题(花了几天时间才找到我的那个PE就是这种情况);虽然SET中没有,但仔细看一下注册表系统环境变量区(HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment)中并未消失,如果这时候运行一次PECMD ENVI,系统变量可以恢复。
1、找到问题原因尝试解决,在声卡驱动文件中追加一条命令PECMD FIND Explorer.EXE,ENVI(或直接用PECMD ENVI)-->测试进SET一看不行,找到原因,系统重新加载Explorer.EXE是需要时间的,等它出来时批处理执行早完了,即相当于这个刷新环境变量的命令是在上一个Explorer.EXE进程中。基于这个猜测,将命令多重复几行,效果出来了,SET中系统变量都出来了。多执行这几行实质上是在等桌面出来,各个机器的快慢不一,究竟执行几条合适很难说。况且在系统启动阶段如果选择驱动声卡,这几行是没必要执行的。因此这种方法解决不理想。
2、在INI或CMD执行时,碰到不能获得自定义的系统变量时再执行ENVI。仔细一想,是行不通的,因为本次执行ENVI只对下一次执行的环境有影响,而本次进程的环境,在进入这个进程时已经初始化成前面的环境。
3、目前只能采用从注册表系统环境变量区将系统变量取出的笨办法。
这是INI文件中恢复三个系统变量
_SUB RESETOSV
REGI $HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\IniDir,IniDir
REGI $HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\IniDrv,IniDrv
REGI $HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\BootOS,BootOS
_END
CMD文件是用REG、FIND和FOR配合也可进行取用。
这个问题要圆满解决,可能要老九出马了。即在KILL EXPLORER.EXE时再装载EXPLORER.EXE后恢复系统级变量。 |
|