记录-图拉丁:让Win98SE完美支持USB存储&驱动安装过程

2026/09/22 posted in  RetroPC

最近Retro了一台“图拉丁”主机,用来装当年的“白月光”——Windows 98 Second Edition。具体的硬件配置和外观追求会另写,本次是特别记录下安装Win98时所踩一些坑的汇总。
关于:如何不借助光盘/优盘,从硬盘直接安装MSDN原版Win98的方法,也会单开文章记录。

硬件本身并不复杂,但真正把系统做到:

  • 驱动全部正常
  • 启动稳定
  • 声卡正常工作
  • USB2.0正常
  • 普通优盘能够直接识别
  • 支持安全移除
  • 尽量保持完整的原版体验&简中界面

为了上述几点所花掉的时间远远超过了装机本身。
尤其是为了支持USB优盘,颇费心血...

网上关于Windows98 USB的资料其实很多,但年代久远、版本混杂。很多当年的微软页面已经消失,一些所谓“万能驱动”兼容性不佳,且很难知道到底修改了哪些系统文件。
还有一些问题则只有在真实硬件、真实PCI设备以及真实CF卡环境下反复安装以后才会遇到。

这篇文章记录一下我最终跑通的方案,以及过程中几个非常容易踩到的坑。
我的目的不是提供一个“唯一正确”的Win98安装方式,而是希望以后还有人在搜索这些二十多年前的问题时,能够少走一些我走过的弯路。

Win98Retro


一、硬件与系统背景

这台机器采用的是图拉丁平台:

  • CPU:Intel Pentium III-S 1.266GHz
  • 主板:Gigabyte GA-6OXT(Intel i815EPT/ICH2)
  • 内存:SDRAM 256M*3
  • 显卡:Asus V7100PRO GeForce2 MX400,(同时准备了GeForce4 Ti4200)
  • 声卡:Creative Sound Blaster Live! CT4760
  • 网卡:3Com 3C905C-TX-M
  • USB2.0:NEC μPD720101PCI扩展卡
  • 存储:Transcend CompactFlash CF300+[IDE-CF]无源转接板

我的目标不是把Windows98改造成一个“现代系统”。
相反,我希望尽可能保持一个干净、稳定、符合当年硬件逻辑的Win98,只解决今天实际使用时比较重要的问题,其中最主要的就是优盘(USB存储)。

最终大致安装顺序为:

  1. Windows98SE简体中文版
  2. Intel Chipset INF
  3. DirectX 8.1b
  4. NVIDIA显卡驱动
  5. CreativeSound Blaster Live!驱动
  6. 3Com网卡驱动
  7. NEC USB2.0 控制器驱动
  8. NUSB3.3 USB Mass Storage
  9. 完整测试
  10. 制作最终Ghost

Intel Application Accelerator(IAA)最终没有安装。
对于这套i815/ICH2+CF卡的环境,Win98自带IDE驱动已经足够稳定,没有必要为了理论上的优化再增加一个变量。
setup


二、为什么我没有使用传统IDE硬盘,而是选择CF

这次安装Windows98,我没有使用传统的IDE机械硬盘,而是采用了:IDE→CF
主板的IDE排线连接到一个无源[IDE-CF]转接板,转接板安装在机箱背部扩展槽的位置,因此CF卡可以直接从机箱背面插拔。
这个设计后来证明非常重要。 Windows98真机调试和虚拟机完全是两回事。

例如:

  • PCI设备枚举
  • 芯片组驱动
  • IDE控制器
  • Sound Blaster Live!
  • USB控制器
  • USB Mass Storage

很多问题只有在真实硬件环境中才会出现。但如果使用传统IDE机械硬盘,每次系统损坏以后,都要拆机、拆硬盘,再把硬盘连接到另外一台电脑,整个调试过程会非常痛苦!

CF就完全不同了。
关机以后,从机箱背面拔出CF卡,接到现代电脑上,就可以:

  • 制作Ghost
  • 恢复Ghost
  • 备份文件
  • 离线替换Windows系统文件
  • 检查DLL、VXD、EXE的实际版本
  • 在系统完全无法启动时进行修复

修好以后把CF插回去,又是真实的Win98硬件环境。
这实际上形成了一种非常舒服的工作方式:

现代电脑负责备份和离线维护,Windows98真机负责真实硬件验证。

CF的True IDE模式与传统ATA/IDE的关系也非常直接。使用合适的无源IDE-CF转接板时,不需要像SATA-IDE转接那样经过额外的协议转换芯片。
因此,对于Windows98这类老系统来说,它可以表现得非常接近普通IDE硬盘。

从我这次实际使用来看,无论系统速度、稳定性,还是最重要的反复调试便利性,CF卡都非常合适。
如果你的目标也是折腾真正的Windows98实机,而不仅仅是在虚拟机里体验,我非常推荐:

IDE-CF转接板+工业CF+Ghost

这套组合最大的价值甚至不只是“比机械硬盘快”,而是:

极大降低试错成本!

WhyCF


三、Ghost 到另一张同型号CF后,安装主板驱动反而蓝屏

这是第一个非常有代表性的坑。
我最初已经做好了一份Windows98Ghost镜像。把它恢复到另一张同型号CF卡以后,Windows98本身能够正常启动。
但是安装Intel Chipset INF后,在第一次重启时,系统开始蓝屏。

一开始很容易怀疑:

同型号、同容量的CF卡,为什么不能直接克隆?

实际最后证明,并不是Ghost镜像损坏,也不是第二张CF不能使用,而是Windows98对IDE/磁盘设备 重新枚举时卡在了一个比较尴尬的状态。

解决方法

进入Windows98安全模式,打开:MSCONFIG→常规→高级疑难解答设置,勾选:强制兼容方式磁盘访问,然后重新启动。
这样相当于暂时让Windows98绕开正常的32位保护模式磁盘驱动路径,先把Intel INF带来的硬件枚举过程完成。
等系统完成设备重新识别以后,再进入MSCONFIG,把:强制兼容方式磁盘访问取消掉,再重新启动。之后IDE就恢复了正常的保护模式驱动。
所以,如果你也使用CF+Ghost安装Windows98,需要注意:

即使两张CF型号、容量完全相同,对Windows98来说,也不一定是完全相同的设备环境!

特别是Ghost制作时,如果系统还处于驱动没有完全释放、设备枚举尚未最终稳定的阶段,换一张物理CF后第一次重新枚举硬件,就可能出现这种问题。

这也是为什么后来我决定:

真正用于长期保存的Ghost,一定要在全部驱动安装、重启验证完成以后再制作。


四、Sound Blaster Live! CT4760:网上找到的“驱动”可能根本不是完整驱动

声卡是第二个很容易走弯路的地方。
我使用的是:Creative Sound Blaster Live! CT4760,网上搜索Windows98驱动时,很容易找到:SBLW9XUP.EXE
这个名字看起来非常像一个完整的 Sound Blaster Live! Windows9x驱动。但实际使用以后发现:

它更准确地说是升级程序,而不是从零开始安装CT4760所需要的完整Live!Ware环境。

正确的顺序应该是:
先安装Creative原版Sound Blaster Live!光盘中的Live!Ware/驱动组件,再运行 SBLW9XUP.EXE 进行升级。


五、Creative 原版光盘不要什么都装

Creative原版光盘里面的东西非常多。各种:

  • 附加软件
  • 工具
  • 演示程序
  • 音频软件
  • Creative自己的应用

看起来好像都应该安装(甚至还包含了Adobe Reader...)。
我第一次也犯了这个错误,安装了很多实际上完全没有必要的东西。
后来重新安装时,我只选择:

Sound Blaster Live!

其他附赠软件没有必要为了所谓“完整”全部安装进去。

遇到旧版/新版文件提示怎么办?

安装过程中还会不断遇到类似:

当前系统已经存在某个文件,是否保留较新的文件?

第一次看到的时候很容易犹豫:到底应该覆盖,还是保留?
其实,应该信心十足的点:

Yes to All

原因是Creative整套安装程序内部不同组件的文件版本本来就不完全一致。不能因为其中某一个文件看起来更旧,就推断整个驱动安装错误。
完成Live!Ware后,再安装:

SBLW9XUP.EXE

之后CT4760才真正进入稳定工作的状态,之前虽然驱动都显示正常但就是放不出声音。
另外,之前习惯了找“绿色插孔”代表音频输出接口,但对老声卡而言,要确定哪个是Aduio Out,在98的时代,或许是没有“绿色接口”这种约定俗成的标准。

所以对于CT4760,我最终把安装逻辑总结成一句话:

原版光盘负责建立完整Live!Ware环境,SBLW9XUP.EXE负责升级;两者不是二选一。 一前一后,均必不可少。


六、Sound Blaster Live!还带来了一个EMM386启动问题

安装声卡以后,系统启动阶段,展示蓝天白云前,还遇到了EMM386相关提示。
最终修改:

C:\CONFIG.SYS

加入或确认:

DEVICE=C:\WINDOWS\HIMEM.SYS
DEVICE=C:\WINDOWS\EMM386.EXE NOEMS

也就是让 EMM386 使用:

NOEMS

之后启动恢复正常。

对于主要运行Windows98游戏的机器,这样设置没有问题。
只有以后真的遇到某个纯DOS程序明确需要EMS内存时,再针对那个程序重新考虑EMS配置即可。


七、3Com网卡没有坏:开机卡很久可能只是在等DHCP

网卡使用的是:3Com 3C905C-TX-M
驱动安装完成以后,系统每次启动都会在进入桌面的过程中等待很久(左上角的光标一直闪个不停),甚至接近两分钟。
这很容易让人误以为:

是不是网卡驱动不正确?

后来发现并不是。
Windows98在启动网络组件时,如果配置为自动获取IP,而当前网络环境又没有及时获得DHCP响应,就可能一直等待。

解决办法:

给网卡设置固定IP,不再让它启动时等待DHCP。

同时,如果这台机器并不需要加入Windows域,也没有必要保留多余的“Microsoft网络登录”,使用普通的“Microsoft友好登录”即可。调整后启动等待从大约两分钟缩短到了十秒内。
所以老电脑开机卡在网络初始化阶段时,不要第一时间怀疑硬件。先检查DHCP。


八、USB 2.0 实际上是两个完全不同的问题

接下来终于到了整个过程中最麻烦的 USB。
这里首先必须分清一个概念:

“USB2.0控制器能够工作”和“Windows98能够识别优盘”是两回事。

我的主板GA-6OXT本身是有USB1.x的,但搭配银欣FLP-02机箱的话,我希望引出一个USB2.0来转TypeE以使得机箱前置的TypeC可用(具体在这里说过 技嘉Socket370老主板与现代机箱的跳线连接 ),因此增加了一张:NEC μPD720101/F1PCIUSB 2.0 扩展卡

这张卡首先需要的是:NEC USB2.0Host Controller 驱动,而优盘需要的是另外一层:
USB Mass Storage Driver。这两个驱动不能混为一谈。


九、NEC μPD720101驱动:不要执着于寻找Setup.exe

NEC这张USB2.0扩展卡的驱动在网上能够找到很多版本。
这里一个容易产生的误解是:

我下载到了驱动,为什么里面没有一个安装程序?

因为这种老硬件驱动完全可以通过设备管理器手动指定INF安装,并不一定存在现代意义上的“一键安装EXE”。
我最后使用的NEC驱动就是这样安装的:设备管理器→找到尚未正确安装的NECUSB控制器→更新驱动程序→指定驱动所在目录,然后让Windows98根据INF给这个设备匹配驱动。
安装完成并重新启动后,首先确认:NEC USB2.0Host Controller本身工作正常。 机箱前面的TypeC口和PCI挡板处的若干个USB接口可用了。
但到这里为止,只解决了USB控制器。此时插入优盘,仍然不代表Windows98一定能够识别。


十、为什么我一开始没有直接选择NUSB

研究Windows98 USB Mass Storage 时,其实很早就能够搜到一个名字:
Maximus-Decim Native USB,也就是 NUSB。
在国外Windows98社区里,NUSB并不是什么冷门方案。相反,它已经存在很多年,有大量资料、版本迭代和实际用户,是非常成熟的一套Windows98 USB解决方案。但是我一开始恰恰没有使用它,原因是:

NUSB对Windows98的语言版本比较敏感。

网上最常见的是英文版,而我安装的是:简体中文版Windows98SE,NUSB又不是单纯增加一个USB驱动文件。它会更新Windows98的一些系统组件,其中包括带有语言资源、甚至存在相互版本依赖的文件。
直接把英文NUSB安装到简体中文Windows98SE上,可能产生英文界面,严重时还会出现系统文件之间不匹配的问题。

而更麻烦的是:

至少从我当时能够搜索到的中文资料来看,几乎没人系统讨论“简体中文Windows98SE如何正确使用NUSB”。

国内搜索“Windows98 USB驱动”,得到的结果更多是:

  • 万能USB驱动
  • 某个优盘的专用驱动
  • 很多已经失效的下载地址
  • 从其他网站反复转载的同一套驱动包

反而是在国外老硬件社区里非常成熟的NUSB,在中文互联网中很少看到针对语言版本问题的完整讨论。

所以一开始我有意绕开了 NUSB。直到其他方案实际测试下来并不理想,我才重新回来研究:

能不能不放弃NUSB,而是把英文NUSB改造成适合简体中文Windows98SE的方案?

后面的整个排查过程,实际上就是围绕这个问题展开的。


十一、USB Mass Storage:我最终尝试了三条路线

方案一:针对特定设备修改驱动

一种思路是使用针对具体USB存储设备的驱动,然后自己增加VID/PID,让驱动接受自己的优盘。

理论上可以。我和ChatGPT也尝试过类似方向。但实际做下来,我认为它的问题是:

成本更高、通用性更差,而且成熟度不如现成的NativeUSB方案。

如果只是为了让某一个指定优盘工作,这种方法可以研究。但如果目标是让Windows98成为一台真正长期可用的机器,它并不是我最后选择的方向。

方案二:国内大家都在用的“万能USB驱动包”

第二条路线是国内流传很多年的Windows98万能USB驱动包。它最大的优点就是简单,而且国内很多玩家都在使用。
但在我的实际环境中,它的兼容性并不好。我试了两款不同的爱国者迷你王优盘,结果还不仅是没法正常使用,而是“蓝屏”...
显然,这不是我想要的选择。

方案三:NUSB

最终还是回到了:
Maximus-Decim Native USB(NUSB),它本身是一套非常成熟的Windows98SE USB Mass Storage 解决方案。
问题只剩一个:

怎么让英文NUSB和简体中文版Windows98SE和平共处?


十二、为什么最终选择NUSB3.3,而不是3.6

因为NEC USB2.0控制器已经使用自己的驱动解决,我真正需要NUSB做的事情主要就是:

USB Mass Storage

因此,我不希望 NUSB再过度修改其他系统组件。
最终选择:NUSB3.3 English(nusb33e.exe 而不是更新的3.6。

这一点后来还真的踩了一个坑。
有一次重新测试时,我误装了NUSB3.6。结果发现:

  • 我的电脑→属性变成英文
  • Device Manager 变成英文
  • Add New Hardware Wizard 也变成英文

检查以后发现系统里的:

C:\WINDOWS\SYSTEM\SYSDM.CPL

已经变成:

文件版本:4.90.3001
产品版本:4.90.3000
大小:389,920 bytes

这已经是Windows Me系列的系统组件版本。
一开始我还以为是自己对NUSB3.3的理解有问题。后来才发现:

装错版本了。

这个插曲也提醒了我:在反复测试老驱动时,不要只凭文件名印象操作,安装之前最好再核对一次版本和文件本身。
所以如果你的目标和我一样,只是给已经正常工作的USB控制器增加 Mass Storage 支持,一定要先确认自己安装的到底是哪一个NUSB。
NUSB_eng


十三、英文NUSB3.3装到简体中文Windows98,会发生什么?

直接安装英文 NUSB3.3后,系统会替换一些Windows文件。
其中部分文件包含语言资源,或者与中文Windows98的核心组件存在版本/语言匹配关系。
于是第一次重新启动时,我遇到了:

程序出错:程序正在对.DLL文件进行无效的动态链接调用。

NUSB_dllError
一开始我的思路非常自然:

那我在 NUSB安装完成以后、重新启动之前,提前把这些英文文件换成中文,不就不会报错了吗?

事实证明:不行!
而这也是整个过程中最值得记录的坑之一。


十四、NUSB显示“安装完成”,其实安装还没有真正结束

NUSB安装程序最后会要求重新启动。经过反复测试,我们后来发现:

这个“重新启动”本身其实也是安装过程的一部分。

也就是说,安装程序退出的时候,一些正在被Windows使用的系统文件还不能直接替换。
NUSB会把这些操作留到:
下一次Windows启动后。 尤其注意这个“后”字。
所以,如果在第一次重新启动之前就把中文文件提前覆盖进去,会发生一个非常反直觉的现象:

  1. NUSB安装完成
  2. 提前离线把英文文件替换成中文
  3. Windows开始第一次启动
  4. NUSB执行之前安排好的延迟文件替换
  5. 刚刚换进去的中文文件又被覆盖
  6. DLL错误照样出现

在一次次重试、判断中,我才观察到:

EXPLORER.EXE

在第一次启动过程中又被重新覆盖了。

所以最终正确的处理方式反而是:

让它先报一次错。

这里必须说明:不是因为“报错本身有什么作用”。
真正需要的是:

让 NUSB的首次启动文件替换阶段完整执行一次。

报错只是这个阶段产生的结果。换句话说:
第一次报错不是我们最终需要修掉的“安装失败”,而是英文NUSB在简体中文Windows98上完成首次启动替换以后暴露出来的语言/系统文件不匹配。
等这次延迟替换真正执行完,再进行最终中文文件覆盖,才不会被NUSB下一次启动重新改回去。


十五、最终跑通的NUSB3.3简体中文处理流程

最终稳定流程如下:

  1. 安装NEC USB2.0控制器驱动
  2. 重启
  3. 确认NEC控制器正常
  4. 安装真正的nusb33e.exe
  5. 按NUSB要求重新启动
  6. 允许第一次启动真正执行
  7. 即使出现DLL动态链接错误,也不要在第一次启动前提前替换文件
  8. 出错以后关机
  9. 把CF卡接到另外一台电脑
  10. 最后一次覆盖准备好的简体中文系统文件
  11. 把CF卡装回Windows98真机
  12. 再次启动
  13. 测试优盘
  14. 测试安全移除
  15. 检查Windows界面语言
  16. 全部正常后制作Ghost

这一次才是真正意义上的:最终覆盖。


十六、真正困难的不是知道换什么,而是找到二十多年前的正确文件

确定需要替换哪些文件以后,还有一个看似简单、实际上非常麻烦的问题:

这些二十多年前的简体中文文件去哪里找?

例如安全移除硬件最终需要用到的:Microsoft Q242975
今天直接搜索这个补丁,已经不像二十年前那样可以进入微软网站点击下载。大量Windows98时代的官方页面已经消失。旧下载链接大量失效,而简体中文版补丁尤其难找。
这次有一个很有意思的过程:我并不是简单通过“下载 Q242975”把它搜索出来的,而是顺着:

  • 其他老硬件驱动光盘
  • 历史补丁包
  • 文件版本
  • Microsoft KB 编号
  • CAB 文件
  • 旧论坛讨论
  • Internet Archive

不断反向定位,最终从历史资料中找到了对应的:简体中文版 Microsoft Q242975 ,并从中取得:

SYSTRAY.EXE
27,648 bytes

HOTPLUG.DLL
68,096 bytes

然后在实际机器上验证,这两个文件能够正常提供中文的安全移除功能。
systray_Succ

这件事对我很有启发:
今天找二十多年前的软件,很多时候不能再按照现代软件的思路:

“搜索软件名→进入官方网站→下载。”

而更像是在做一次软件考古:

先确认需要什么版本,再确认这个版本历史上属于什么补丁或产品,最后反过来寻找当年的安装介质。


十七、Explorer 也不能随便找一个中文版覆盖

EXPLORER.EXE 也是类似的思路。
不是随便找一个中文Windows98的 Explorer 覆盖回去,而是先确定 NUSB所需要的版本,然后寻找:

相同版本的简体中文文件。

最终从简体中文版 Internet Explorer 5.01 SP2 的:

IE4SHL95.CAB

中找到了:

EXPLORER.EXE

版本:4.72.3612.1700
大小:171,280 bytes

这样解决的就不只是:“把英文改成中文”。而是尽可能做到:

版本保持一致,只替换成对应语言的文件。

这也是我认为处理老系统文件时非常重要的原则:不要只看文件名。
同一个文件名可能存在很多年代、很多版本、很多语言版本。
真正应该核对的是:

  • 文件名
  • 文件版本
  • 文件大小
  • 语言
  • 来源
  • 与当前系统其他组件之间的版本关系

十八、我最终替换的 5 个关键中文文件

我的原则并不是:

NUSB改了什么,我就全部恢复成Windows98原版。

因为这样很可能把 NUSB真正需要的新组件也一起恢复掉。

我的思路是:

驱动部分保留 NUSB;需要显示中文或者存在语言兼容问题的系统组件,寻找对应的简体中文版本。

最终重点处理的是下面 5 个文件。

文件 目标路径 大小 来源
EXPLORER.EXE C:\WINDOWS\EXPLORER.EXE 171,280 bytes 简中 IE 5.01 SP2
USER.EXE C:\WINDOWS\SYSTEM\USER.EXE 659,975 bytes 已验证的简中 Win98 SE
USER32.DLL C:\WINDOWS\SYSTEM\USER32.DLL 69,632 bytes 已验证的简中 Win98 SE
SYSTRAY.EXE C:\WINDOWS\SYSTEM\SYSTRAY.EXE 27,648 bytes 简中 Q242975
HOTPLUG.DLL C:\WINDOWS\SYSTEM\HOTPLUG.DLL 68,096 bytes 简中 Q242975

其中 EXPLORER.EXE 的版本应为:

4.72.3612.1700

最终路径分别为:

C:\WINDOWS\EXPLORER.EXE

C:\WINDOWS\SYSTEM\USER.EXE

C:\WINDOWS\SYSTEM\USER32.DLL

C:\WINDOWS\SYSTEM\SYSTRAY.EXE

C:\WINDOWS\SYSTEM\HOTPLUG.DLL

这样最终既能够使用NUSB的USB Mass Storage,又能够得到正常的安全移除图标,同时Windows98主界面保持中文。
NUSB_Succ

最终文件在这里,供有需要的朋友取用:NUSB3.3及修改文件by Rich.zip


十九、老系统资料越来越难找,AI 在“软件考古”上非常有用

如上所述,这次大量历史文件的定位,我使用了 ChatGPT 辅助分析。
它真正有价值的地方并不是:

“让AI给我一个下载地址。”

而是面对二三十年前的软件时,可以帮助把:
文件名→文件版本→Microsoft KB编号→历史驱动光盘→CAB文件→旧论坛→Internet Archive 这些不同线索串起来。

传统搜索引擎对今天的内容很好用。但是面对Windows98时代的资料,体验已经明显下降。
很多时候:

  • 知道一个文件名,搜索出来的是大量DLL下载站
  • 知道一个KB编号,原来的 Microsoft 页面已经不存在
  • 知道一个驱动型号,又会遇到几十个互相转载、来源不明的压缩包
  • 很多真正有价值的信息反而藏在二十年前的论坛帖子、驱动光盘目录和Internet Archive中

这时候AI比较适合做的,并不是替你“相信某一个文件”,而是:

帮助你从大量历史碎片中找到下一条值得验证的线索。

比如这次寻找Q242975,真正有效的思路不是不停搜索“Q242975下载”,而是继续追问:

  • 这个补丁当年解决什么问题?
  • 它包含哪些文件?
  • 文件版本是多少?
  • 有没有其他硬件厂商把这个微软补丁收入自己的驱动光盘?
  • 哪些历史安装介质可能还保存着简体中文版?
  • Internet Archive是否保存了对应年代的安装光盘?

这种检索能力覆盖的线索数量,是单纯靠人工不断更换关键词搜索很难达到的。

但找到以后,仍然应该由自己检查:

  • 文件大小
  • 文件版本
  • 文件语言
  • 原始来源
  • 是否属于对应补丁
  • 最后的实机运行结果

所以我现在对于老系统资料的一个经验是:

不要只让AI“找驱动”,而应该让AI帮你做软件考古。

不要只问:

“给我一个驱动下载地址。”

更有效的问题往往是:

“这个版本为什么需要这个文件?”
“这个文件最初属于哪个Microsoft补丁?”
“哪个语言版本的Windows、Internet Explorer 或硬件驱动光盘里可能包含同版本文件?”

对于已经逐渐从现代搜索引擎索引中消失的历史软件,这种“考古式检索”非常有用。

当然,最终仍然应该以:版本号、文件大小/哈希、可靠来源和实机验证为准。
AI可以大幅扩大检索覆盖面,但不应该代替最后的验证。很多我们自己已经不能完成的事情,因为AI的存在变得成为可能。


二十、Mac用户特别注意:Finder的“替换文件夹”可能直接把Windows98毁掉

这是整个过程中一个和Windows98本身没有关系,却差点让我误判问题原因的大坑。
为了方便,我在Mac上准备了一个名叫:

SYSTEM

的文件夹。里面放着准备覆盖的几个中文文件。
然后把这个 SYSTEM 文件夹拖到CF卡的:

C:\WINDOWS\

Finder提示目标存在同名文件夹,我选择了:替换
我原本下意识按照Windows Explorer的逻辑理解:

同名文件夹合并,只覆盖其中的同名文件。

结果不是!
Finder直接把目标SYSTEM文件夹整体替换掉了!

结果原来Windows98 SYSTEM目录中的:

  • VMM32.VXD
  • DEFAULT.ECW
  • 大量DLL
  • 大量VXD
  • 以及其他系统文件

全部没了。

最后SYSTEM目录里面只剩我准备的那几个文件,Windows当然再也无法启动。
MacBUG

所以,如果你也在Mac上维护Windows98 CF卡:

千万不要把一个叫SYSTEM的文件夹直接拖过去选择“替换”。

正确做法是:

  1. 打开CF卡原来的 C:\WINDOWS\SYSTEM\
  2. 再打开保存中文替换文件的目录
  3. 只把需要替换的几个文件本身拖进去
  4. 对同名文件进行覆盖

这个坑和驱动完全没有关系。
但如果不知道Finder的这个行为,很容易误以为:

某个Windows98驱动把系统弄坏了。


二十一、为什么CF在这种折腾中真的非常好用

走完整个过程以后,我反而觉得[IDE-CF]是这台机器非常重要的一部分。
虚拟机当然方便,但很多PCI、IDE、USB、声卡和芯片组问题,在虚拟机里面根本不会出现。真正的机械硬盘又会让每次恢复和离线维修非常麻烦。

CF恰好处于两者之间。它仍然让Windows98工作在:

  • 真实主板
  • 真实IDE/ATA环境
  • 真实PCI总线
  • 真实显卡
  • 真实声卡
  • 真实USB控制器

上面,但同时又拥有接近:“可移动系统盘” 的维护便利性。
我这次之所以敢反复测试:

安装驱动
↓
重新启动
↓
报错
↓
关机
↓
拔 CF
↓
恢复Ghost/ 替换文件
↓
插回去
↓
继续测试

很大程度上就是因为CF从机箱背面几秒钟就可以拔下来。

如果每一次失败都意味着拆机取机械硬盘,我大概很早就不会继续测试这些细节了。
所以如果让我重新做一次Windows98实机,我依然会选择:

真实老硬件+[IDE-CF]+工业CF+多阶段Ghost


二十二、最终结果

经过这些折腾,最终得到的是一套我比较满意的Windows98SE环境:

  • Intel i815芯片组正常
  • DirectX 8.1b正常
  • GeForce2 MX400 正常
  • Sound Blaster Live! CT4760正常
  • 3Com网卡正常
  • NEC μPD720101 USB2.0控制器正常
  • 普通USB Mass Storage 可以直接识别
  • 有正常的安全移除硬件图标
  • Windows98主界面保持简体中文
  • 不依赖来源不明的中文万能USB驱动包
  • 启动过程也没有长时间等待DHCP

到这个状态以后,我才重新制作最终Ghost。
这份Ghost才是真正值得长期保存的版本。因为以后即使重新恢复系统,也不需要再次经历:

安装 NUSB
↓
第一次重启
↓
DLL 报错
↓
关机
↓
离线替换中文文件
↓
再次启动

这一整套过程。


二十三、如果让我重新安装一次,我会采用这个顺序

如果以后再从零安装这台机器,我会固定采用:

  1. Windows98SE 简体中文版
  2. Intel Chipset INF 6.2.1.1001
  3. DirectX 8.1
  4. NVIDIA Detonator 45.23
  5. Creative原版 Sound Blaster Live! / Live!Ware
  6. SBLW9XUP.EXE
  7. 3Com 3C905C-TX-M
  8. 设置固定 IP,避免 DHCP 导致开机长时间等待
  9. 如需要,在 CONFIG.SYS 设置 EMM386.EXE NOEMS
  10. NECμPD720101/F1USB2.0驱动
  11. 重启确认USB控制器正常
  12. NUSB3.3
  13. 让 NUSB完成第一次重新启动,即使出现 DLL 错误
  14. 关机,把CF接到另外一台电脑
  15. 最终覆盖准备好的简体中文 EXPLORER / USER / USER32 / SYSTRAY / HOTPLUG
  16. 装回电脑重新启动
  17. 测试优盘识别
  18. 测试安全移除
  19. 检查系统界面和设备管理器
  20. 制作最终Ghost

其中,如果Ghost到另一张CF后,在Intel INF重新枚举IDE时蓝屏,可以尝试:安全模式→MSCONFIG→高级疑难解答设置→强制兼容方式磁盘访问,让设备枚举完成以后,再取消这一选项恢复正常模式。


二十四、建议保留多个Ghost节点

如果你也准备认真折腾一台Windows98真机,我非常建议不要只保存最后一个Ghost。
至少保留:

01_纯系统
02_基础驱动完成
03_USB安装之前
04_全部驱动完成
05_最终稳定版

这样某一步出了问题,不需要从头开始。

尤其Windows98很多驱动安装都会修改:

  • INF
  • 注册表
  • VXD
  • DLL
  • 系统核心文件

单纯“卸载驱动”很多时候并不能真正回到安装以前的状态。
Ghost反而是最简单、最可靠的回滚方式。而CF的存在,又让这种多阶段Ghost的维护方式变得非常容易。


写在最后

这次最大的感受是:

Windows98的问题很多时候不是“没有驱动”,而是驱动之间存在非常严格的安装顺序、版本、语言和系统文件依赖。

今天我们已经习惯了:下载一个EXE→下一步→下一步→完成
再回到Windows98,很容易把:

  • 完整驱动
  • 升级程序
  • INF 驱动
  • Windows补丁
  • USB Host Controller 驱动
  • USB Mass Storage 驱动

全部混在一起。一旦把这些层次拆开,问题反而会变得清晰很多。
对于这种已经二十多年的系统,我认为最重要的一件事也不是追求:“最新版”
而是:

找到一套真正跑通的组合,验证每一次重新启动,然后及时留下Ghost。

另外,折腾这种老系统时,也不要忽略今天已经拥有的新工具。
很多Windows98时代的网页、驱动和Microsoft补丁正在逐渐从现代搜索引擎中消失。
借助AI去分析文件版本、KB编号、旧驱动光盘、CAB文件和历史论坛,再由人去做最终验证,是一种非常适合今天“软件考古”的方式。

最后,如果让我重新设计一次Windows98实机,我仍然会选择:

真实老硬件+[IDE-CF]+工业CF+多阶段Ghost

因为我们真正想得到的,并不仅仅是一台:“能够开机的Windows98”。
更有意思的是在这个过程中一点一点弄清楚:

二十多年前的Windows、驱动和真实硬件,当年究竟是怎么一起工作的。