无忧启动论坛

标题: 请教一下关于无法设置虚拟内存的问题[已解决] [打印本页]

作者: HB天意    时间: 2008-9-1 15:50
标题: 请教一下关于无法设置虚拟内存的问题[已解决]
我现在修改的一个pe在设置虚拟内存时失败,只出现设置内存的对话框。但是无法设置。导致在低于256M内存的机子上无法加载外置程序。
估计是因为替换了PECMD.EXE(版本为最新版3.2.0808;原来的为2.8版的),版本更高了,部分命令出现了变化的缘故。
先附代码如下。请高手看看。能否帮我修改下。

//询问是否设定虚拟内存。
_SUB IFSetPageFile
TEAM TEXT 是否设置虚拟内存?|ENVI YESNO=YES
MESS 您的计算机物理内存较少,某些外置程序的运行可能需要用到\n虚拟内存。设置了虚拟内存,有助于提高系统的速度和稳定性;\n如果您需要保护并恢复硬盘分区数据,可跳过虚拟内存的设置。\n \n您确定要设置虚拟内存吗?(建议设置,30 秒后默认选择否)@设置虚拟内存 #YN *30000
IFEX $YESNO=YES,Call SetPageDrv!TEXT 没有建立虚拟内存……
WAIT 500
_END
//设置虚拟内存。
_SUB SetPageDrv
TEAM TEXT 正在设定虚拟内存……|ENVI $TARGET_ROOT=
BROW * $请选择虚拟内存文件存放的分区,取消则从D盘开始自动选择分区。
IFEX $TARGET_ROOT=,TEXT 正在设定虚拟内存(自动选择存放分区)……|PAGE D:\%PF% 192 256!TEXT 正在设定虚拟内存(虚拟内存存放在 %TARGET_DRIVE% 盘)……|PAGE %TARGET_DRIVE%\%PF% 192 256
_END
//物理内存低于 256MB 时询问是否取消设定虚拟内存
FIND MEM<256,CALL IFSetPageFile
//挂接硬盘上 Windows 系统的字体,如果因字体过多造成启动极其缓慢或无法启动,请关闭下面的命令
//FONT C:\WINDOWS\Fonts
//设置快速启动栏
LINK !%QuickLaunch%\设置虚拟内存,%CurDir%\WinPE_TOOLS\SETPAGEFILE.EXE
LINK !%QuickLaunch%\驱逐舰杀毒软件,%CurDir%\VCR\VCR.EXE
TEXT 正在加载外置程序……
//建立外置程序加载的可行性报告,如果设置了虚拟内存或者可用内存大于一定数值,则加载有关的外置组件
//此行有两条语句,“|”号前面的语言句是在Temp文件夹中建立一个RPT_OK.CMD文件,文件内容为一条命令行语句:
//FOR %%I IN (C D E F G H I J K L M N O P Q R S T) DO IF EXIST %%I:\PAGEFILE.SYS PECMD LINK %Temp%\RPT_OK,%SystemRoot%
//该语句的作用为在C D E F G H I J K L M N O P Q R S T几个盘中寻找页面文件,如果找到,将在Temp文件夹中建立一个RPT_OK.LNK文件以标志已建立虚拟内存。
//不用担心硬盘中可能会存在其它的页面文件而影响结果,因为前面已有一条语句清理掉硬盘中已存在的虚拟内存页面文件了。
//“|”号后面的语言句是执行刚生成的RPT_OK.CMD文件,以真实执行判断并生成标志。
TEAM EXEC !=CMD.EXE /C ECHO FOR %%I IN (C D E F G H I J K L M N O P Q R S T) DO IF EXIST %%I:\PAGEFILE.SYS PECMD LINK %Temp%\RPT_OK,%SystemRoot%>%TEMP%\RPT_OK.CMD|EXEC !=%TEMP%\RPT_OK.CMD
//设置自解压包的运行条件,如设置了虚拟内存,则建立运行条件,否则根据可用内存大小设置不同的运行条件
//具体点是:如果已经设置虚拟内存或可用内存大于60M,将在Temp文件夹中建立一个RPT_OK60.LNK文件以标志可运行自解压包。
IFEX %Temp%\RPT_OK.LNK,LINK %Temp%\RPT_OK60,%SystemRoot%!IFEX MEM>60,LINK %Temp%\RPT_OK60,%SystemRoot%
//如果设置了虚拟内存或可用内存大于 120MB,则设置IFWait变量为空以使下面的部分命令为无阻塞运行,否则设置IFWait变量为=使其排队执行。
ENVI IFWait==
IFEX %Temp%\RPT_OK.LNK,ENVI IFWait=!IFEX MEM>120,ENVI IFWait=

[ 本帖最后由 yidawpf 于 2008-9-2 21:25 编辑 ]
作者: dos时代菜鸟    时间: 2008-9-1 16:09
八成是 find 和 ifex两个指令的变更导致的
find 用来操作 非数字型变量  
find mem 用来判断内存的总量
ifex 用来操作 数字型变量
ifex mem 用来判断剩余内存数量
作者: yichya    时间: 2008-9-1 17:45
BROW FIND都不对,FIND 要把YESNO加上%,BROW的看说明。
作者: HB天意    时间: 2008-9-1 18:07
原帖由 yichya 于 2008-9-1 17:45 发表
BROW FIND都不对,FIND 要把YESNO加上%,BROW的看说明。


能够帮我改下吗?
作者: yichya    时间: 2008-9-1 18:15
BROW target_root*,请选择虚拟内存文件存放的分区,取消则从D盘开始自动选择分区。
find $%YESNO%=YES,Call SetPageDrv!TEXT 没有建立虚拟内存……
find $%TARGET_ROOT%=,TEXT 正在设定虚拟内存(自动选择存放分区)……|PAGE D:\%PF% 192 256!TEXT 正在设定虚拟内存(虚拟内存存放在 %TARGET_DRIVE% 盘)……|PAGE %TARGET_DRIVE%\%PF% 192 256
_END
(估计target_drive不能用了吧,修改一下)

[ 本帖最后由 yichya 于 2008-9-1 18:17 编辑 ]
作者: HB天意    时间: 2008-9-1 18:17
原帖由 yichya 于 2008-9-1 18:15 发表
BROW target_root*,请选择虚拟内存文件存放的分区,取消则从D盘开始自动选择分区。
find $%YESNO%=YES,Call SetPageDrv!TEXT 没有建立虚拟内存……
find $%TARGET_ROOT%=,TEXT 正在设定虚拟内存(自动选择存放 ...


非常感谢。我测试下。
作者: HB天意    时间: 2008-9-1 19:14
原帖由 yichya 于 2008-9-1 18:15 发表
BROW target_root*,请选择虚拟内存文件存放的分区,取消则从D盘开始自动选择分区。
find $%YESNO%=YES,Call SetPageDrv!TEXT 没有建立虚拟内存……
find $%TARGET_ROOT%=,TEXT 正在设定虚拟内存(自动选择存放 ...


我吧你这段代码替换我原来的后,发现虚拟内存只能设置在D盘。无法设置其他盘。
请问是怎么回事啊?

screenshot.jpg (44.03 KB, 下载次数: 71)

screenshot.jpg

作者: HB天意    时间: 2008-9-1 21:57
我进如winpe的时候,如果设置内存,好像是无法设置的。它只有打开。。。
取消才自动设置到D盘。
作者: HB天意    时间: 2008-9-2 07:24
估计是设置内存代码有问题吧。yichya帮我再看看吧。
作者: dos时代菜鸟    时间: 2008-9-2 07:57
标题: 这是我的pe内存设置脚本
自己该一下吧
-------------------------------------------------------------
//清理掉上次启动 PE 或 Windows 时留下的虚拟内存页面文件
TEXT 正在检测可用内存并建立虚拟内存...
INIT I
ENVI PF=Pagefile.sys
TEAM FILE C:\%PF%|FILE D:\%PF%|FILE E:\%PF%|FILE F:\%PF%|FILE G:\%PF%|FILE H:\%PF%|FILE I:\%PF%|FILE J:\%PF%|FILE K:\%PF%|FILE L:\%PF%|FILE M:\%PF%|FILE N:\%PF%|FILE O:\%PF%|FILE P:\%PF%|FILE Q:\%PF%|FILE R:\%PF%|FILE S:\%PF%|FILE T:\%PF%|FILE U:\%PF%|FILE V:\%PF%|FILE W:\%PF%
ENVI PF=
//设置虚拟内存,如果内存余量大于60M就不设置虚拟内存
ifex MEM<60 ,CALL ASK!text 不必设置虚拟内存
EXEC !=CMD.EXE /C ECHO FOR %%I IN (C D E F G H I J K L M N O P Q R S T U V W) DO IF EXIST %%I:\PAGEFILE.SYS PECMD.EXE LINK %Temp%\RPT_OK,%SystemRoot%>%TEMP%\RPT_OK.CMD
EXEC !=%TEMP%\RPT_OK.CMD
IFEX %Temp%\RPT_OK.LNK,CALL MEMOK!ifex MEM>59,CALL MEMOK
IFEX %temp%\mem_ok.txt,!call mem_mess

//设置虚拟内存
_SUB ASK '询问是否设置虚拟内存
mess 发现可用内存不足60M,是否设置虚拟内存?\n \n等待5秒钟,默认为 YES @设置虚拟内存 #YN *5000 $Y
FIND $%YESNO%=YES,CALL PAGEFILE_SET
_END

_SUB PAGEFILE_SET  '设置虚拟内存
BROW Tag,*C:\,请选择一个硬盘分区用来设置虚拟内存,默认选择C:\
FIND $%TAG%=,ENVI DRIVE=C:!FDRV DRIVE=%TAG%
text 执行虚拟内存设置指令:PAGE %DRIVE%\PAGEFILE.SYS 60 256
PAGE %DRIVE%\PAGEFILE.SYS 60 256
_END

//生成 MEM_OK.TXT 文件做以标记
_SUB MEMOK
FILE %Temp%\RPT_OK.LNK
FILE %TEMP%\RPT_OK.CMD
exec !=cmd.exe /c echo memory ok >%temp%\mem_ok.txt
_END
//内存不足警告,如果没有设置好内存就显示内存警告
_SUB mem_mess
        MESS 内存空余不足60M,而且系统无法设置虚拟内存\n(可能是没有可用的硬盘空间,或者用户选择了不设置虚拟内存。)!\n\n系统不能挂载二级内核PE_SYS.WIM!\n没有了某些必要的dll文件支持,一些软件将无法稳定运行\n PE将失去IE、MMC、WINABC、WIMNT、7Z、MAKECAB等功能\n\n@内存警告 #ok
TEXT 没有设置必要的虚拟内存
_END
TEXT
作者: dos时代菜鸟    时间: 2008-9-2 09:08
设置虚拟内存用这个试一试
http://bbs.wuyou.net/attachment.php?aid=45273
作者: HB天意    时间: 2008-9-2 10:19
原帖由 dos时代菜鸟 于 2008-9-2 09:08 发表
设置虚拟内存用这个试一试
http://bbs.wuyou.net/attachment.php?aid=45273

这个软件怎么在启动的时候调用?
作者: dos时代菜鸟    时间: 2008-9-2 12:08
这个我也没测试过在启动的时候调用啊
我都是用 脚本的
你可以 把他 写入pecmd.ini 看看
作者: HB天意    时间: 2008-9-2 21:23
原帖由 dos时代菜鸟 于 2008-9-2 07:57 发表
自己该一下吧
-------------------------------------------------------------
//清理掉上次启动 PE 或 Windows 时留下的虚拟内存页面文件
TEXT 正在检测可用内存并建立虚拟内存...
INIT I
ENVI PF=Pagef ...


把你这个修改了一下加入我的配置文件。搞定了。
谢谢!
作者: dos时代菜鸟    时间: 2008-9-3 07:12
呵呵,不用谢,如果有bug还需要大家帮忙呢.




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3