论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Windows 操作教程
Tag:windows,xp,vista,密码,技巧,注册表,安装,分区,安全,瘦身,双系统,死机,激活,新手,服务,组策略,视频教程

{Windows XP}DIY一张综合安装盘之制作篇

文章类别:Windows 操作 | 发表日期:2008-10-6 12:29:46

总结

这段将会对基于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

结尾

  再你的cdshell.ini文件的最末尾处应该有一个"end"标示。

  end

  大体上就是这些了, "end"命令会把你带入一个CD Shell的命令行界面,就像DOS界面一样,但在那里支持更多的命令并且目录结构的显示也更加漂亮。在命令行中输入"HELP"就可以察看都能做些什么。

  调试

  CD Shell最好用的一个功能就是调试了。想要调试的话只要简单的双击“CDSH”文件夹下的"cdshw.com"文件就可以了。这将会运行一个模拟器,并能精确模仿出计算机启动时将会发生的事情。你不用担心无意中安装了XP或者错误地进行了类似的操作,因为所有的调试过程都是模拟出来的,"chain"或者"boot"或者其他类似的命令实际上是不被调试模式支持的。要退出调试模式,只要在命令行中输入"exit"命令即可。如果你无法退出调试模式,也只用按下"Ctrl+Alt+Del"来结束调试模式的进程。

  如果因为某些原因调试模式无法正常启动,那么你可以把你的整个"CDSH"文件夹复制到其他位置试试看,多换几个地方,直到能够正常工作。例如,你可能会收到类似这样的一个错误信息:"set" command or "print" command or something like that is not supported。我把我的"CDSH"文件夹复制到桌面上然后重新进入调试模式,这下就可以正常工作了。所以我就在桌面上编辑了剩下的代码,然后重新移动到ROOT文件夹下的"CDSH"目录中。

  小花样

  以下的代码我放在了我的"cdshell.ini"文件的最开头处,它能实现如下效果:

  首先,它以一个"boot:"区段开始,这个区段首先在屏幕上显示"Press enter to boot from DVD...",然后才会显示出菜单。如果在5秒钟之内没有按下回车键,那么程序就会跳过菜单,直接引导第一个硬盘分区上的操作系统,无论那是什么系统。

  后面的两个区段时我写的用来显示当前的日期和时间,这个代码的效果可以在顶部的截图中看到。

boot:
cls
print "\n"
print "Press Enter to boot from DVD... \n"
getkey 5 boot 0x80
if $lastKey == key[enter]; then goto time
# When no key found...
goto boot

# Function to display time of day
time:
set hour = $timeHour
set ampm = "am"
if $timeHour > 12; then set hour = $timeHour - 12
if $timeHour > 12; then set ampm = "pm"
set time = "$hour:$timeMinute$ampm"

# Function to display date
date:
set month = "n/a"
if $dateMonth == 1; then set month = "Jan."
if $dateMonth == 2; then set month = "Feb."
if $dateMonth == 3; then set month = "Mar."
if $dateMonth == 4; then set month = "Apr."
if $dateMonth == 5; then set month = "May."
if $dateMonth == 6; then set month = "Jun."
if $dateMonth == 7; then set month = "Jul."
if $dateMonth == 8; then set month = "Aug."
if $dateMonth == 9; then set month = "Sep."
if $dateMonth == 10; then set month = "Oct."
if $dateMonth == 11; then set month = "Nov."
if $dateMonth == 12; then set month = "Dec."
set date = "$month$dateDay,$dateYear"

  如果想要在实践和日期旁显示一条线,我使用了如下的代码:

print c "\n\cXXÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ<\c0B$time $date\cXX>ÄÄ \n\n"

  使用"Ä"字符可以在屏幕上显示一条直线,而不是用连字符号形成的虚线(-----)

测试和刻录

  创建ISO文件

  我们可以使用CDIMAGE来创建ISO文件,不过用CDIMAGE无法向已有的ISO文件中添加新的文件。并且一次你只能创建一个ISO文件。

  如果你还没有CDIMAGE,那么你可以在准备开始页的“需要准备的材料”下找到下载。我建议你把CDIMAGE和“ROOT”文件夹保存到同一个文件夹下。例如:

  D:\cdimage.exe
  D:\ROOT\

  打开一个命令行窗口,然后进入到保存了CDIMAGE和ROOT文件夹的路径下,在你使用命令的时候要注意,以下命令是一行输入完的,因为页面宽度的问题这个很长的命令才以两行的形式显示出来,还要注意,我把我的DVD文件保存在D盘的根目录,你当然可以保存在其他地方。

start D:\cdimage.exe -lXP2K98 -t08/23/2001,09:00:00 -bD:\ROOT\CDSH\loader.bin -h -n -o -m D:\ROOT D:\customdvd.iso

  这些命令代表什么意思?

start D:\cdimage.exe

  用命令行的方式运行CDIMAGE程序

-lXP2K98

  把ISO文件的卷标设置为XP2K98。这个你自己可以随意设置,请注意这里是一个连字号后面跟一个小写字母L,不是i,数字1或者其他什么。

-t08/23/2001,09:00:00

  设置DVD的生成时间,默认设置就可以

-bD:\ROOT\CDSH\loader.bin

  引导扇区文件的位置,loader.bin

-h -n -o -m

  特殊的参数,保持默认设置就可以
 
D:\ROOT

  欲生成镜像文件的文件的保存位置
 
C:\customdvd.iso

我们要把生成的ISO文件保存的位置以及希望使用的文件名。在本例中我命名该文件为"customdvd.iso",并把它保存在D盘的根目录下,在这里你必须输入iso这个扩展名。请注意,你要保存所生成的镜像文件的分区必须有足够大的硬盘空间,如果没有就无法创建ISO文件了。

  注意:有时候CDIMAGE会给出类似如下的警告:

  WARNING: These two files are identical for the first 65536 bytes, but differ at some point beyond that. This could be intentional, but it might indicate that one of these two source files is corrup:
    D:\ROOT\PRO1\SETUPLDR.BIN
    D:\ROOT\PRO2\SETUPLDR.BIN

  这是正常的,CDIMAGE 认为这些文件可能会被认为是一样的,但实际上不不同的,因此它会给你一个警告。指出文件一致的可能性。我们是了解的,这两个文件虽然看起来一样,但实际上还是不同的,因此这个警告可以不用理会。

  更好的方法是创建一个批处理文件,这样你就可以随时运行这个文件来创建ISO镜像。以下命令只有两行,是一个BAT文件的内容,如果直接复制并粘贴过去,那你应该不会弄错。只要把文件路径部分按照你的实际情况修改一下就可以使用了。

DEL C:\*.ISO
start D:\cdimage.exe -lXP2K98 -t08/23/2001,09:00:00 -bD:\ROOT\CDSH\loader.bin -h -n -o -m D:\ROOT C:\customdvd.iso

  测试ISO文件

  VMware 4.0.5 和Virtual PC 5.2都是很好的测试工具。

  Virtual PC - 创建一个新PC,并且随便选一个名字。选择"Guide Me",并选择"Windows XP"作为要安装的操作系统。如果愿意,你还可以调整一下迷人分配的内存大小,尽可能保证不要低于128MB。创建一个新的磁盘镜像,并且随意起一个名字。然后启动这个虚拟机,在"CD" -> "Capture Image"命令下找到你创建的ISO文件,然后选择"PC" -> "Restart"命令,接着就开始安装了,在这过程中你就可以测试一下你的镜像文件到底还有没有问题。

  VMware - 创建一个新的虚拟机,选择"Custom"然后选择"Windows XP Professional"作为操作系统。如果愿你,你可以编辑一下虚拟机的名称和保存位置。你也可以重新调整一下分配给虚拟机的内存大小,接着设置你的网络连接,这里我建议你选择"Do not use a network connection"因为它和我的网络连接有冲突,而且在这个测试中也没必要使用网络。选择"Create a new virtual disk",然后如果愿你你也可以重设一下虚拟机磁盘的大小,默认的大小就是可以使用的最大值。如果你仅仅是为了测试,用不了4GB,那么磁盘文件就不会占据4GB的空间,但如果虚拟机使用超过了4GB,软件会自动分配给虚拟机更多的磁盘空间。如果你想要测试OEM预安装模式,并且要使用6GB左右的空间,那么你最好在这里就调整的大一些。完成后,选择"Edit virtual machine settings",选中光驱,然后选择"Use ISO Image",选中你的ISO文件,点击“确定”,然后启动虚拟机,安装过程就开始了。

  刻录ISO文件

  基本上,你只要有一个能够刻录镜像文件的刻录软件就可以了,我用的是Nero 6.0.0.19,我右键点击那个文件,然后选择"Open With..."并找到Nero,Nero就可以自动运行并且打开刻录对话框,点击“刻录”按钮就可以开始了。

清理

  为了我们的DVD能更好工作,我们需要清理掉一些垃圾文件。

  你可以使用Windows的搜索功能来搜索"ROOT"文件夹,这样所有子文件夹中的文件都可以被搜索到了。

  unattended.txt
  所有这些文件全部删除

  bootfix.bin
  这个文件是用来显示"Press any key to boot from cd...."的,如果你不想浪费时间来等待这些文字的显示而直接进入安装界面,就可以直接删除所有的这些文件。

  .bak
  .bak文件是由UltraEdit创建的,全部都可以删除。

  txtsetup.sif
  如果相应的i386文件夹中有"txtsetup.sif"文件,则这些文件可以删除。但是如果这些文件位于引导文件夹(PRO1,PRO2,3ENT,NT4S等),那么你就不能删除它们。

  你的所有引导文件夹中都会有一个"txtsetup.sif"文件,如果你只在Windows XP Pro的"i386"文件夹下看到它而没有在“PRO1”文件夹下看到,那么就需要把它移动到引导文件夹中。如果引导文件夹中还没有的时候千万别删除它们。

  txtsetup.si_
  如果有,那么它们全部可以被删除。

  setupldr.bin
  如果相应的i386文件夹中有"setupldr.bin"文件,那么它们可以被删除。但如果是在根目录下(PRO1,PRO2,3ENT,NT4S),则千万不要删除它们。

  setupldr.bi_
  如果有,那么它们全部可以被删除

屏幕截图

  这里是一些我的DVD运行的截图:

  这张图是用DVD光盘引导并载入CD Shell的时候显示的启动界面。想要知道怎样改动它,你可以阅读CD Shell Boot Image一段的Extras部分内容。

视频教程列表
文章教程搜索
 
Windows 操作推荐教程
Windows 操作热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058