Sense 发表于 2007-6-28 05:34:23

遇上一个难题。用ENVI定义PATH路径,启动PE后无效。花了两天时间,尝试很多次,翻遍PECMD相关帖子,google类似问题,都解决不了。
昨晚突然想到,运行的cmd.exe是用HOTK注册的热键启动,热键程序由PECMD或PELOGON调用。问题是,环境变量需要ENVI $刷新后(也就是SHELL启动后)程序才能使用,但PECMD早就在运行,所以通过HOTK启动的程序都继承了PECMD的环境变量。后来直接运行cmd.exe查看PATH是对的,证实了我的猜想。
这个问题有办法解决么?实在不行就只能放弃HOTK了,Win+C CMD、Win+E TC这么方便的热键用不了真是可惜。

lxl1638 发表于 2007-6-28 14:37:52

原帖由 rzndir 于 2007-6-17 02:20 PM 发表 http://bbs.wuyou.net/images/common/back.gif
我在971搂反映的问题,可能是以下原因:设置了最小配置模式启动的登录画面,壁纸就发生,如由最小配置模式加载外部配置或将PECMD换成V2,8.332就十分正常,反复多次不明原因,后来无奈将PECMD.IN改成如下正常。
...

认真看LOGO命令和TEXT命令的说明,LOGO命令有三种用法:
1、采用 LOGO 图,这是大家用得最多的;
2、不采用 LOGO 图,只设置背景颜色;
3、LOGO命令也可以转LOGO图。

lxl1638 发表于 2007-6-28 14:39:10

原帖由 Sense 于 2007-6-28 05:34 AM 发表 http://bbs.wuyou.net/images/common/back.gif
遇上一个难题。用ENVI定义PATH路径,启动PE后无效。花了两天时间,尝试很多次,翻遍PECMD相关帖子,google类似问题,都解决不了。
昨晚突然想到,运行的cmd.exe是用HOTK注册的热键启动,热键程序由PECMD或PELO ...

PECMD中的PATH与DOS的PATH是两回事!能理解PECMD的PATH命令的人不多,请你认真看它的说明。

zjqcomputer 发表于 2007-6-28 14:44:07

1.PEcmd对于子过程名的解释有点问题。例如存在以下两个过程:

_SUB InstallIE2
................................
_END
_SUB InstallIE
................................
_END

在调用InstallIE时会错误地调用了InstallIE2,如果改成如下这样就没问题:

_SUB InstallIE2
................................
_END
_SUB InstallIE1
................................
_END


2.如果将毛桃0418原版的pecmd换成2.8.6后
由于在在pecmd.ini和winpe.ini中都有以下语句,因此导致重复执行SHEL %SystemRoot%\EXPLORER.EXE。

FIND Explorer.EXE,!TEXT 正在载入桌面……|SHEL %SystemRoot%\EXPLORER.EXE|LOGO|TEXT

说明白点就是两个ini文件中的FIND Explorer.EXE都均会认为是“否”,而重复执行了后面的“!TEXT 正在载入桌面……|SHEL %SystemRoot%\EXPLORER.EXE|LOGO|TEXT”

按照常理,只要在winpe.ini中执行了该语句后explorer.exe就会被加载,然后再执行pecmd.ini中的这条语句时会判断FIND Explorer.EXE为“是”而不执行的。

[ 本帖最后由 zjqcomputer 于 2007-6-28 03:05 PM 编辑 ]

Sense 发表于 2007-6-28 15:14:44

原帖由 lxl1638 于 2007-6-28 02:39 PM 发表 http://bbs.wuyou.net/images/common/back.gif


PECMD中的PATH与DOS的PATH是两回事!能理解PECMD的PATH命令的人不多,请你认真看它的说明。

老九大大,我在配置文件中用了以下命令,结果进入PE后,Win+C后的PATH变量未变,直接运行cmd.exe的PATH变量正常。应该是热键呼出的cmd.exe由PECMD调用,继承了PECMD的环境变量。

HOTK Win + #0x43,CMD.EXE
ENVI $PATH=%PATH%;%CurDrv%\TOOLS
RUNS PECMD.EXE ENVI,_刷新环境变量

lxl1638 发表于 2007-6-28 15:24:19

原帖由 zjqcomputer 于 2007-6-28 02:44 PM 发表 http://bbs.wuyou.net/images/common/back.gif
.PEcmd对于子过程名的解释有点问题。例如存在以下两个过程:

_SUB InstallIE2
................................
_END

_SUB InstallIE
................................
_END

在调用InstallIE时会调用了InstallIE2,如果改成如下这样就没问题:
//=========================================================

_SUB InstallIE2
................................
_END
_SUB InstallIE1
................................
_END
//=========================================================

2.如果将毛桃0418原版的pecmd换成2.8.6后
由于在在pecmd.ini和winpe.ini中都有以下语句,因此导致重复执行SHEL %SystemRoot%\EXPLORER.EXE。

FIND Explorer.EXE,!TEXT 正在载入桌面……|SHEL %SystemRoot%\EXPLORER.EXE|LOGO|TEXT

说明白点就是两个ini文件中的FIND Explorer.EXE都均会认为是“否”,而执行了后面的“!TEXT 正在载入桌面……|SHEL %SystemRoot%\EXPLORER.EXE|LOGO|TEXT”

按照常理,只要在winpe.ini中执行了该语句后explorer.exe就会被加载,然后再执行pecmd.ini中的这条语句时会判断FIND Explorer.EXE为“是”的。


1、因为 InstallIE2 包含 InstallIE ,所以调用 InstallIE 时发现 InstallIE2 中含有 InstallIE,即会调用 InstallIE2 了。
   产生这种现象的原因是 PECMD 为了支持行后注释引起的,如下面蓝色的定义是合法的。因为 InstallIE`子过程
   包含了InstallIE。如果将 _SUB 后的字符串整行解释的话就难以支持持后注释了。
_SUB InstallIE`子过程
................................
_END
   解决方法如你所说,另一种是将 InstallIE 定义在 InstallIE2 之前,即:

_SUB InstallIE
................................
_END

_SUB InstallIE2
................................
_END

2、SHEL 命令指定的Explorer.EXE不是PECMD读到它即时被加载的。在PECMD执行期间,PELOGON已驻留内存,
   PECMD通过一种途径将SHEL 命令的数据发送给 PELOGON,再PELOGON加载Explorer.EXE。另一方面还涉及
   到线程的时差问题。以后假如更新的话更解决这个问题,目前要避免这种情况就是不要出现两次 SHEL 命令。

lxl1638 发表于 2007-6-28 15:28:35

原帖由 Sense 于 2007-6-28 03:14 PM 发表 http://bbs.wuyou.net/images/common/back.gif


老九大大,我在配置文件中用了以下命令,结果进入PE后,Win+C后的PATH变量未变,直接运行cmd.exe的PATH变量正常。应该是热键呼出的cmd.exe由PECMD调用,继承了PECMD的环境变量。

HOTK Win + #0x43,CMD.E ...

都说了,PATH是设置PECMD的读解INI文件期间的工作路径的,不是DOS或系统的PATH命令。

Sense 发表于 2007-6-28 16:29:49

原帖由 lxl1638 于 2007-6-28 03:28 PM 发表 http://bbs.wuyou.net/images/common/back.gif


都说了,PATH是设置PECMD的读解INI文件期间的工作路径的,不是DOS或系统的PATH命令。

我知道,PATH可以创建/删除目录,或设置当前目录。
现在的问题是,用 ENVI $PATH=... 这样的命令来设置系统环境变量PATH,并在SHEL之后ENVI刷新。但是如果某程序是通过HOTK注册热键来调用的,不会继承这个变量。

lxl1638 发表于 2007-6-28 17:55:12

PATH本身也是系统的环境变量,你这样可能会冲洗掉已有的%PATH%,也可能你这样冲洗环境
变量被系统拒绝执行。看看这里:
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=91524&extra=page%3D2&page=56

Sense 发表于 2007-6-28 18:42:28

原帖由 lxl1638 于 2007-6-28 05:55 PM 发表 http://bbs.wuyou.net/images/common/back.gif
PATH本身也是系统的环境变量,你这样可能会冲洗掉已有的%PATH%,也可能你这样冲洗环境
变量被系统拒绝执行。看看这里:
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=91524&extra=page%3D2&page=56


可能我说得不够清楚,还是上幅图吧。
请看,同一个PE启动完成后,左侧的cmd是由Win+C热键调用,右侧是直接运行cmd.exe。明显可以看出,左侧的cmd继承的环境变量只是原来在SETUPREG.HIV里设置好的,后期设置的或由系统自动生成的(比如CPU品牌、类型等)都没有取得。这会不会是因为热键程序由PECMD定义和调用,所以直接继承了PECMD的环境变量,而PECMD又是在系统启动之初就运行的原因?

Sense 发表于 2007-6-28 18:48:59

补充一下,左侧的cmd里PATH没有D:\TOOLS,右侧有。
右侧PATH有些重复,可能是某个外置程序的影响,正在查找中。
重要的是,如果热键调用的程序无法获取后来设置的系统变量,会有很多不便之处。

lxl1638 发表于 2007-6-28 19:38:38

原帖由 Sense 于 2007-6-28 06:42 PM 发表 http://bbs.wuyou.net/images/common/back.gif



可能我说得不够清楚,还是上幅图吧。
请看,同一个PE启动完成后,左侧的cmd是由Win+C热键调用,右侧是直接运行cmd.exe。明显可以看出,左侧的cmd继承的环境变量只是原来在SETUPREG.HIV里设置好的,后期设 ...

是这样的,热键启动的程序由 PELOGON 调用,而 PELOGON 的环境变量在它启动时(注册表)就确定了,
它不会继承由PECMD设置的环境变量,PECMD也无法改就PELOGON的环境变量,PELOGON是PECMD
的父进程,PECMD没有这个能力(权限)修改PELOGON的环境变量。通过PECMD新设置的环境变量是给
启动后由桌面或EXPLORER.EXE启动的程序用的。

热键启动的程序由PELOGON调用,它也只能继承PELOGON的环境变量。
这是由系统决定的。

[ 本帖最后由 lxl1638 于 2012-7-13 12:14 编辑 ]

Sense 发表于 2007-6-28 19:59:54

多谢大大不厌其烦地解释!
如果能有其他方法解决就好了,比如热键调用后先传递当前环境变量不知能不能做到?否则热键调用的cmd、TC之类就没多大意义了。

lxl1638 发表于 2007-6-28 21:30:37

原帖由 Sense 于 2007-6-28 07:59 PM 发表 http://bbs.wuyou.net/images/common/back.gif
多谢大大不厌其烦地解释!
如果能有其他方法解决就好了,比如热键调用后先传递当前环境变量不知能不能做到?否则热键调用的cmd、TC之类就没多大意义了。

热键执行的程序最好是一些与环境变量无关的程序,如关机、重启或启动杀毒软件等;
一些与环境变量有关的程序不宜通过热键来调用,暂时没有很好的办法来解决这问题。

Sense 发表于 2007-6-30 14:16:20

又被郁闷了一上午。
先向变量CurMem赋值121,然后执行以下命令,结果老是说“函数错误”。
FIND $CurMem>60,IFEX %SystemDrive%\>10,EXEC =%CurDir%\WinRAR\WinRAR.exe
这就奇怪了,121>60这个条件肯定成立,%SystemDrive%盘还有60多兆空间,怎么就死活不执行呢?翻过n次PECMD说明再nn次生成ISO启动虚拟机后,刚才灵机一动,难道是121和60位数不一致?于是改成:
FIND $CurMem>060,IFEX %SystemDrive%\>10,EXEC =%CurDir%\WinRAR\WinRAR.exe
好了,它就老老实实执行了。那个汗啊~~~

另,上次那个添加路径结果产生了重复项,已经证明是PECMD引起的。所以直接用 ENVI $PATH=%PATH%;%CurDrv%\TOOLS 这样的命令不行,只能用 REGI 写注册表来迂回完成。
昨天又发现一点,多次使用TEXT ...* 这样的保留上次TEXT后,容易导致SHELL进不去。VPC上10次大概有7次“载入桌面”就停了,从日志来看都是正常的。本来是想在登录界面逐步显示当前操作的,看来是做不到了。
大大能否把WAIT指令增强一下,加入等待指定进程结束?比如 WAIT WINRAR.EXE 就可以暂停直到WINRAR.EXE执行完。

沙漠之子 发表于 2007-7-2 21:52:00

一些建议
1.给wall加个参数,用于桌面图片加入失败时,显示单色桌面
2.shel命令,当shell不是explorer.exe时,如cmd将无法激活其他程序窗口
3,%CurDrv%这个环境变量不知在启动过程中何时有效
另%CurDir%环境变量是否取消了的说

lxl1638 发表于 2007-7-2 23:16:53

1、桌面的颜色是注册表内定的,无需用PECMD改;
2、能否帖图上来说明一下;
3、我查源码看看,这里有问题的话也要找时间才能更新。

现在PECMD虽仍有问题,但不多了,也较完善了,收集些BUG后有空再更新。

沙漠之子 发表于 2007-7-2 23:54:26

1.我知道桌面背景的颜色是注册表定的 只是通过wall的一个参数重新设置
原理原来当然是修改注册表压,类似于logo命令.

2.这个问题大大用shel cmd.exe 再在cmd中开启个其他程序窗口就知道问题在那了

3.建议在命令行模式下,输出命令执行的状态(如成功或失败)的信息

4.MENUITEM "清理临时文件夹的文件(&D)...,PECMD.EXE TEMP DELETE",20034
MENUITEM "重新设置临时文件目录(&S)...,PECMD.EXE TEMP SETTING",20035

我本想将他们,制成快捷方式 但不成功 (也就是将这两个命令,支持独立使用)

[ 本帖最后由 沙漠之子 于 2007-7-3 12:00 AM 编辑 ]

hzlingyz 发表于 2007-7-3 23:00:26

有点复杂,下了慢慢研究下

lxl1638 发表于 2007-7-3 23:30:21

原帖由 沙漠之子 于 2007-7-2 11:54 PM 发表 http://bbs.wuyou.net/images/common/back.gif
1.我知道桌面背景的颜色是注册表定的 只是通过wall的一个参数重新设置
原理原来当然是修改注册表压,类似于logo命令.

2.这个问题大大用shel cmd.exe 再在cmd中开启个其他程序窗口就知道问题在那了

3.建议 ...

那两条命令不能独立使用,设计之初就这样定了,是PECMD不公开的命令,但只有在特定的条件下才能用。
只启动CMD.EXE,没有桌面,有些程序肯定无影无踪的,有些会最小化到左下角。关键是没有桌面。

[ 本帖最后由 lxl1638 于 2007-7-3 11:32 PM 编辑 ]

zts59 发表于 2007-7-5 17:08:27

能不能考滤把访问密码以窗口的形式:

目前好像是用LOGO的形式,现在我没有LOGO图片,在虚拟机上测试OK,在真实机上,出现灰屏一片片的,极不好看;

还有一个问题是因为:使用密码机制后,RUNS加载的一个输入法托盘图标程序(点内存2M多,可能启动时很大),就不能正常进入桌面;而把RUNS加载的输入法托盘图标程序注释点后,就可以正常进入桌面。

现好像两者(密码机制和RUNS加载程序)不能一起用,放弃其中一种就可进入桌面,因为密码机制同时也LOGO加载一图片好像,导致在输入密码后,LOGO的图片占用内存极大,这时再有一个稍为大一点的程序,就堵了,进不了桌面。

我可是P43.0 CUP 512M的内存,都堵死了。

[ 本帖最后由 zts59 于 2007-7-5 05:10 PM 编辑 ]

lxl1638 发表于 2007-7-5 17:24:43

你不看看 LOGO 命令的说明?

┣ ━━ ┿━━┿━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃      │格式│LOGO [文件路径][,颜色]                                                                                                         ┃
┃      ├──┼──────────────────────────────────────────────┨
┃      │功能│设置或关闭登录画面。                                                                                                            ┃
┃      ├──┼──────────────────────────────────────────────┨
┃      │参数│■文件路径为图片文件名(含路径),支持BMP/JPG/PNG/GIF等各式(需要GDI+支持)。                        ┃
┃      │      │■颜色为背景颜色,支持16进制数值。当同时设置了LOGO图和背景颜色时优先显示LOGO图。             ┃
┃      │      │■若LOGO图无效,将使用背景颜色;若设置的背景颜色无效将使用注册表内定的背景颜色。                ┃
┃      │      │■若无参数,则关闭启动画面(渐隐淡出)。                                                                                 ┃
┃LOGO├──┼──────────────────────────────────────────────┨
┃      │示例│LOGO %SystemRoot%\LOGON.JPG                                                                                       ┃
┃      ├──┼──────────────────────────────────────────────┨
┃      │备注│※此命令为非阻塞模式执行。执行本命令后,将立即执行下一条命令。因此,如果在命令行中使用,程序┃
┃      │      │马上退出,将不能看到效果。                                                                                                 ┃
┃      │      │※此命令可多次使用。如果你愿意的话,启动过程共可以更换多个不同的图片。                                 ┃
┃      │      │※配置文件结束之前,必须调用一次不带参数的"LOGO"命令,以关闭启动画面。                               ┃
┃      │      │※使用LOGO图要求的LOGO内存会大些。                                                                                 ┃

[ 本帖最后由 lxl1638 于 2007-7-5 05:28 PM 编辑 ]

zts59 发表于 2007-7-5 17:56:44

原帖由 lxl1638 于 2007-7-5 05:24 PM 发表 http://bbs.wuyou.net/images/common/back.gif
你不看看 LOGO 命令的说明?

┣ ━━ ┿━━┿━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
┃      │格式│LOGO [文件路径][,颜色]            ...



晕,我根本不用LOGO,这是前提。我是认为现在的密码机制中含有LOGO命令,才会堵死

所以建议看看能不能改变一下密码机制,以窗口的形式然后加入到PELOGON中去

[ 本帖最后由 zts59 于 2007-7-5 06:03 PM 编辑 ]

lxl1638 发表于 2007-7-5 18:19:20

晕,LOGO命令不一定就要有LOGO图,这个功能的出现就是为了降低LOGO内存用的。
LOGO就是一个全屏窗口,输入密码那部分只是这个窗口的一个EDIT标准控件。
当这个窗口不加载LOGO图时会大大降低内存。

lxl1638 发表于 2007-7-5 18:30:04

另外,可能你的PE内核大太了,本人以前那个120M版的PE(含较完整的IE6.0)在256M内存的机子都可顺利启动,启动后还有30M左右的内存。

按理 RUNS 命令加载的输入法图标不会影响加载桌面的,因为加载桌面在加载输入法图标之后。

zts59 发表于 2007-7-5 19:33:51

呵呵,现在我的这个问题就是,密码和RUNS 输入法图标,只能选其一,两者开启就堵死了

PE的镜像为IMG格式,不压缩才42M。

lxl1638 发表于 2007-7-5 19:38:08

肯定是其它地方出了问题,42M的PE有128M内存也足够了。

zts59 发表于 2007-7-5 19:48:08

奇怪的是,在110M虚拟机中测试都没有问题,在真机上就堵死,晕

语句:
TEAM ENVI $PE_PROG=%CurDrv%\外置程序|RUNS PECMD.EXE ENVI $,RENEW
RUNS %PE_PROG%\IME\internat.exe,Internat

SHEL %SystemRoot%\EXPLORER.EXE,***********,5|WAIT 3000|LOGO|TEXT

如果把第二句注释,就没问题


在这台945芯片的机上,PECMD密码那屏的左上那个PECMD版本信息成了一个白块,在虚拟机上可以显示!

这白块好难看呀,会不会PE内核的显卡驱动对945集成显卡有问题?除了那白块外,其他地方正常,晕

[ 本帖最后由 zts59 于 2007-7-5 08:05 PM 编辑 ]

swgol 发表于 2007-7-6 23:19:26

谢谢,正在学习:)

175746228 发表于 2007-7-7 00:02:41

没有权限下载哦
郁闷呢
页: 23 24 25 26 27 28 29 30 31 32 [33] 34 35 36 37 38 39 40 41 42
查看完整版本: [PECMD X86 & X64 V4.0.2011.0501版] WinPE命令解释程序 & WinPE登录命令。