制作安装盘及其它
本节讲述了制作安装盘的结尾工作及相关下载……
系统基础总结
创建一个引导菜单
清理垃圾文件
测试
所需工具下载
屏幕截图
总结
这段将会对基于NT的和非NT的系统创建多重引导光盘的基础进行一下总结。
基于NT的操作系统
Windows XP Pro, XP Home, 2000, NT 4.0
通常基于NT的操作系统在安装光盘根目录下都会有一个i386文件夹,这个文件夹中也包含了引导相对应操作系统所必需的文件。当一个可引导的光盘被创建以后,一个名为"xpboot.bin"的文件就会被用来生成相应的引导选项。
当光盘引导的时候会发生以下情况:
引导扇区告诉计算机在“i386”文件夹中查找"setupldr.bin"文件
"setupldr.bin" 吩咐计算机在“i386”文件夹中查找一个名为"txtsetup.sif"的文件加
"txtsetup.sif"告诉你算机在光盘的根目录找到"setup.exe"文件
因此当我们要创建一个可引导的多操作系统光盘时,我们要注意以下几点事情:
必须在保存各个操作系统安装文件的文件夹以外创建一个名称为四个字母的文件夹,这个文件夹用来保存相应操作系统的引导盘中的所有文件。
"setupldr.bin"文件必须经过编辑,这样原来指向i386的路径就全部指向我们新建的四个字母为名的文件夹去。
txtsetup.sif文件的"SetupSourcePath="这一行必须经过修改,以映射到正确的保存了安装文件的文件夹去。通常会类似于SetupSourcePath = "\SETUP\WINXPPRO\"
"xpboot.bin"必须经过修改,这样所有指向i386的路径就会被转向到我们新建的四个字母为名的引导文件夹去。而且这个文件必须被重命名为一个DAT文件(PRO1.DAT, 2PRO.DAT等)。
把所有的DAT文件都放置在"ROOT"文件夹下。
因此,"txtsetup.sif"和"setupldr.bin"这两个文件必须放在引导文件夹(PRO1, HOM2, ERD1等),而DAT和IMA文件则应该放在"ROOT"文件夹下。
非NT操作系统
Windows 95, 98 SE, ME
一个非NT的操作系统通常用插入软驱的软盘来引导系统,并运行操作系统的安装程序,虽然有可引导的Windows 98引导光盘,不过无疑使用引导软盘是最简单的方法。
通常安装一个非NT的操作系统要经过以下步骤:
下载引导软盘的镜像文件,或者用WinImage通过已有的引导软盘创建一个镜像文件
在WinImage中展开"autoexec.bat"和"config.sys"两个文件。
根据安装文件的实际路径编辑"autoexec.bat"文件
编辑"config.sys"文件以便形成从光盘引导的选项
把文件保存为IMA格式
把所有IMA和IMG文件复制到"ROOT"文件夹下。
创建引导菜单
你可以在"下载" 页面找到相应文件。注意看一下我的"cdshell.ini"文件,这样你差不多就应该知道CD Shell的脚本是怎样工作的了。如果你把那个文件复制到你的"CDSH"文件加并且运行debugger程序,你就可以看到我的引导菜单是怎样工作的。不用担心,那里的选项不会实际运行任何程序的,这只是向你演示了我的文件起了什么作用。
现在看一些有趣的东西。要创建我们自己的引导菜单,需要CD Shell 2.0.9b这个软件,这个软件以前叫做BootScriptor。现在你还是可以下载到BootScriptor的,它们之间的差别相当大,所以BootScriptor的内容在这里不再讨论。
如果你决定使用比较老的"diskemu.cmd"的方式,可能更容易做一些,然而这里也不讨论哪种方法。
要注意这部分文章非常长,因为没有相关的文件,因此要得到CD Shell使用中的小窍门就很困难了,然而一旦你掌握了基本的操作,那么你就不会遇到太大的问题了。
使用CD Shell有很多好处,首先CD Shell中显示的目录结构非常清晰明了,你可以设置不同的颜色,你可以直接察看文本文件,而不用打开那个丑陋的蓝色界面的Edit程序,你可以直接预览你的菜单而不用真的把这些文件刻录成光盘或者制作成镜像文件并载入虚拟机中。
这里就是一个用CD Shell创建的引导菜单的截图:
如果你是照着“准备开始”一节一直做过来的,那么你的ROOT文件夹下应该有一个"CDSH"文件夹,这个文件夹中的"cdshell.ini"文件就包含了引导菜单中要显示的内容。用记事本或者写字板或者其他你喜欢的编辑器打开那个文件。
重要:在以下工作都完成后注意看本文的最末尾处。
CD Shell 命令
CD Shell的脚本命令非常庞大,而相应的文档则有些缺乏,所以我会在这里演示一些基本的创建引导菜单的内容。
显示文字
cls
print "1) Windows XP Professional SP1 Corporate \n"
"cls"命令会在显示文字之前先清空整个屏幕上显示的内容。所有想要显示出来的文字必须包含在引号里面。通过使用分号(;),输入一次命令可以执行多个print命令,只要两个print命令之间用分号隔开。\n命令会创建一条横线并返回,因此如果我们要在两个菜单选项之间空出一点空间的时候就可以在第一条Print命令后第二个print命令使用前先使用一个 \n\n 命令。
要想居中、左对齐或者右对齐,可以使用"c","l"和"r"命令。
print c "This is an example of centered text"
如果你想添加注释,只要在你的注视内容前添加一个"#"字符即可。
# This is a comment. It will not print anything on the screen.
Creating Sections
区段(Setions)被用来保持代码整洁和有组织,并且允许命令直接跳到某个特定的区段以执行特定的代码。要想创建一个区段,首先输入区段的名称,然后后面紧跟一个冒号。通常我习惯于把我的第一个区段命名为"menu:"。注意,代码是严格按照写入的顺序按顺序执行的,因此要记得在每个操作系统区段之后要紧跟一个针对那个操作系统的关键区段(key section)。在你看到操作系统区段的时候就明白我在说什么了。例如:
boot:
xp_pro:
moreoptions:
设置颜色 - 可选
在每个区段的最前面使用以下命令就可以为整个引导菜单设置颜色。
menu:
set textColor= color[grey on black]
set boldColor= color[cyan on black]
可用的颜色有:黑色,蓝色,绿色,紫色,红色,品红、棕色,灰色、亮灰色、亮蓝色、亮绿色、亮品红、亮红色、黄色还有白色。
想要用不同颜色高亮显示某些特定的文字,可以使用"\cXX" 和 "\cxx"命令。"\cXX" 指出随后的文字将会使用高亮色(bold color),而"\cxx" 命令指出随后的文字将会使用普通的颜色。如果你想要使用更多的颜色而不想每次都设置一边,那么可以把XX 用两位数字代替,第一位表示背景色,第二位表示文字的颜色,例如:
print "\cXXThis text is boldcolor. \cxxThis text is normal color."
以上的命令会用黑色背景青色文字显示出"This text is boldcolor",并在后面用黑色背景灰色文字显示 "This text is normal color."。
代码 颜色 代码 颜色
0 黑色 8 灰色
1 蓝色 9 亮蓝色
2 绿色 A 亮绿色
3 青绿 B 亮青色
4 红色 C 亮红色
5 品红色 D 亮品红
6 棕色 E 黄色
7 亮灰色 F 白色
因此如果你仔细看了本也前面的那张截图,那么你就应该明白以下的代码会产生怎样的效果:
print l "\cXXPress \c0BF1 \cXXfor Help"; print r "\c0Bckite@portraitofakite.com \n"
"Press"这个词是用青色显示在黑色背景上的,而"F1"则是用亮青色显示在黑色背景上,"For Help"又使用青色显示在黑色背景上,然后我的email地址又一次用亮青色显示在了黑色背景上。
用户输入
接下来我们新建一个名为"MainKey:"的区段,这个区段可以放在"menu:"后面,这里是这个区段的头两行:
MainKey:
getkey 20 boot 0x80
if $lastKey == key[1]; then goto XP_Pro
第一行指定了区段的名称。
第二行使用"getkey"命令来保存用户输入的信息。"20" 是一个时间的上限,这意味着如果在20秒内没有任何按键被按下去,"boot 0x80"就会被运行。"boot 0x80"会自动从系统中的第一个硬盘驱动器尝试启动。如果当前的硬盘中还没有装操作系统,那么自然什么都不会发生。你可以不设置时间显示,这样如果你一直不按键盘,那么屏幕上就会一直显示最初的信息,直到你按下某个键。
最后一行用了一个"if"命令来检查用户输入的内容,这里的意思是,如果“$lastkey”中被输入的内容是"1",那么将会转到(goto)"XP_Pro"区段。
运行文件和条约到区段
chain /PRO1.DAT
这个命令将会运行PRO1.DAT这个文件,文件名前面的一个斜线"/"用以告诉 CD Shell PRO1.DAT这个文件保存在光盘的根目录下。
memdisk /98SE.IMA
这个命令会运行98 SE 启动盘的磁盘镜像,并开始安装98 SE。在IMA和IMG文件之前必须先使用一个"memdisk"命令。
goto XP_Pro:
这个命令会跳到"XP_Pro:"区段并继续执行那里的代码。
type /keycodes.txt
这个命令会在屏幕上显示"keycodes.txt"文件的内容,实际上这并不会打开那个文本文件,它只是把文件的内容显示在屏幕上而已。
操作系统区段
以"User Input:"区段为例说明,我们现在新建一个名为"XP_Pro:"的区段,每个操作系统的区段后面都要跟着一个关键区段,这个区段会为我们的XP选项新建一个菜单。以下是我的"XP_Pro"区段的内容。注意 "Ä"字符,使用在命令中后,这个字符会显示出一个连续的横线,如果用连字符的话横线就变成了中间有间断的虚线了,像这样:"-----"。
XP_Pro:
cls
print r "\n\cXXPress \c0BF1 \cXXfor Help \n"
print c "\n\cXXMicrosoft Windows XP Professional SP1 Corporate \n"
print c "\cXXÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ \n"
print "1) Regular \n"
print "2) Unattended \n"
print "3) OEMPreinstall \n"
print c "\n\n"
print "Press any key to return to main menu... \n"
XP_Pro_Key:
getkey 20 goto menu
if $lastKey == key[1]; then chain /PRO1.DAT
if $lastKey == key[2]; then chain /PRO2.DAT
if $lastKey == key[3]; then chain /PRO3.DAT
if $lastKey == key[F1]; then goto Help
goto menu
会发生什么事?计算机会显示出XP_Pro:区段中的内容,然后继续执行下一个区段(XP_Pro_Key:),在这个区段中就会使用到getkey 命令。因此计算机会等待用户按下一个按键,如果用户按下的是"1",计算机就会开始执行"PRO1.DAT"文件,并开始XP的安装过程。如果20秒之内没有任何按键被按下,那么CD Shell就会返回主菜单。
如果对于XP你只有一个选项,并且不想再有其他的额外菜单,那么你就可以跳过"XP_Pro:"和"XP_Pro_Key:"这两个区段。
getkey 20 boot 0x80
if $lastKey == key[1]; then goto XP_Pro
以上命令可以变为:
getkey 20 boot 0x80
if $lastKey == key[1]; then chain /PRO1.DAT
更多选项:
为了使用Partition Magic 8.0, Norton Ghost等程序以及察看相应的产品序列号,我还在我的文件中使用了MoreOptions:这个区段。同时,在"menu:"和"MainKey:"这两个区段还要有相应的入口。
MoreOptions:
cls
print r "\n\cXXPress \c0BF1 \cXXfor Help \n"
print c "\n\cXXMore Options \n"
print c "\cXXÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ \n"
print "1) Read/Copy Files From NTFS Volumes To FAT32/16 Drives \n"
print "2) Partition Magic 8.0 \n"
print "3) Norton Ghost \n"
print "4) View Serial Numbers \n"
print c "\n\n"
print "Press any key to return to main menu... \n"
MoreOptions_Key:
getkey 20 goto menu
if $lastKey == key[1]; then memdisk NTFS.IMA
if $lastKey == key[2]; then memdisk PM8.IMG
if $lastKey == key[3]; then memdisk GHOST.IMA
if $lastKey == key[4]; then goto SerialNumbers
goto menu
[img][/img]
[img][/img]
[img][/img]
[img][/img]
[img][/img]