最近Retro了一台“图拉丁”主机,用来装当年的“白月光”——Windows 98 Second Edition。具体的硬件配置和外观追求会另写,本次是特别记录下安装Win98时所踩一些坑的汇总。
关于:如何不借助光盘/优盘,从硬盘直接安装MSDN原版Win98的方法,也会单开文章记录。
硬件本身并不复杂,但真正把系统做到:
- 驱动全部正常
- 启动稳定
- 声卡正常工作
- USB2.0正常
- 普通优盘能够直接识别
- 支持安全移除
- 尽量保持完整的原版体验&简中界面
为了上述几点所花掉的时间远远超过了装机本身。
尤其是为了支持USB优盘,颇费心血...
网上关于Windows98 USB的资料其实很多,但年代久远、版本混杂。很多当年的微软页面已经消失,一些所谓“万能驱动”兼容性不佳,且很难知道到底修改了哪些系统文件。
还有一些问题则只有在真实硬件、真实PCI设备以及真实CF卡环境下反复安装以后才会遇到。
这篇文章记录一下我最终跑通的方案,以及过程中几个非常容易踩到的坑。
我的目的不是提供一个“唯一正确”的Win98安装方式,而是希望以后还有人在搜索这些二十多年前的问题时,能够少走一些我走过的弯路。

一、硬件与系统背景
这台机器采用的是图拉丁平台:
- 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存储)。
最终大致安装顺序为:
- Windows98SE简体中文版
- Intel Chipset INF
- DirectX 8.1b
- NVIDIA显卡驱动
- CreativeSound Blaster Live!驱动
- 3Com网卡驱动
- NEC USB2.0 控制器驱动
- NUSB3.3 USB Mass Storage
- 完整测试
- 制作最终Ghost
Intel Application Accelerator(IAA)最终没有安装。
对于这套i815/ICH2+CF卡的环境,Win98自带IDE驱动已经足够稳定,没有必要为了理论上的优化再增加一个变量。

二、为什么我没有使用传统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
这套组合最大的价值甚至不只是“比机械硬盘快”,而是:
极大降低试错成本!

三、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。

十三、英文NUSB3.3装到简体中文Windows98,会发生什么?
直接安装英文 NUSB3.3后,系统会替换一些Windows文件。
其中部分文件包含语言资源,或者与中文Windows98的核心组件存在版本/语言匹配关系。
于是第一次重新启动时,我遇到了:
程序出错:程序正在对.DLL文件进行无效的动态链接调用。

一开始我的思路非常自然:
那我在 NUSB安装完成以后、重新启动之前,提前把这些英文文件换成中文,不就不会报错了吗?
事实证明:不行!
而这也是整个过程中最值得记录的坑之一。
十四、NUSB显示“安装完成”,其实安装还没有真正结束
NUSB安装程序最后会要求重新启动。经过反复测试,我们后来发现:
这个“重新启动”本身其实也是安装过程的一部分。
也就是说,安装程序退出的时候,一些正在被Windows使用的系统文件还不能直接替换。
NUSB会把这些操作留到:
下一次Windows启动后。 尤其注意这个“后”字。
所以,如果在第一次重新启动之前就把中文文件提前覆盖进去,会发生一个非常反直觉的现象:
- NUSB安装完成
- 提前离线把英文文件替换成中文
- Windows开始第一次启动
- NUSB执行之前安排好的延迟文件替换
- 刚刚换进去的中文文件又被覆盖
- DLL错误照样出现
在一次次重试、判断中,我才观察到:
EXPLORER.EXE
在第一次启动过程中又被重新覆盖了。
所以最终正确的处理方式反而是:
让它先报一次错。
这里必须说明:不是因为“报错本身有什么作用”。
真正需要的是:
让 NUSB的首次启动文件替换阶段完整执行一次。
报错只是这个阶段产生的结果。换句话说:
第一次报错不是我们最终需要修掉的“安装失败”,而是英文NUSB在简体中文Windows98上完成首次启动替换以后暴露出来的语言/系统文件不匹配。
等这次延迟替换真正执行完,再进行最终中文文件覆盖,才不会被NUSB下一次启动重新改回去。
十五、最终跑通的NUSB3.3简体中文处理流程
最终稳定流程如下:
- 安装NEC USB2.0控制器驱动
- 重启
- 确认NEC控制器正常
- 安装真正的
nusb33e.exe - 按NUSB要求重新启动
- 允许第一次启动真正执行
- 即使出现DLL动态链接错误,也不要在第一次启动前提前替换文件
- 出错以后关机
- 把CF卡接到另外一台电脑
- 最后一次覆盖准备好的简体中文系统文件
- 把CF卡装回Windows98真机
- 再次启动
- 测试优盘
- 测试安全移除
- 检查Windows界面语言
- 全部正常后制作Ghost
这一次才是真正意义上的:最终覆盖。
十六、真正困难的不是知道换什么,而是找到二十多年前的正确文件
确定需要替换哪些文件以后,还有一个看似简单、实际上非常麻烦的问题:
这些二十多年前的简体中文文件去哪里找?
例如安全移除硬件最终需要用到的:Microsoft Q242975
今天直接搜索这个补丁,已经不像二十年前那样可以进入微软网站点击下载。大量Windows98时代的官方页面已经消失。旧下载链接大量失效,而简体中文版补丁尤其难找。
这次有一个很有意思的过程:我并不是简单通过“下载 Q242975”把它搜索出来的,而是顺着:
- 其他老硬件驱动光盘
- 历史补丁包
- 文件版本
- Microsoft KB 编号
- CAB 文件
- 旧论坛讨论
- Internet Archive
不断反向定位,最终从历史资料中找到了对应的:简体中文版 Microsoft Q242975 ,并从中取得:
SYSTRAY.EXE
27,648 bytes
HOTPLUG.DLL
68,096 bytes
然后在实际机器上验证,这两个文件能够正常提供中文的安全移除功能。

这件事对我很有启发:
今天找二十多年前的软件,很多时候不能再按照现代软件的思路:
“搜索软件名→进入官方网站→下载。”
而更像是在做一次软件考古:
先确认需要什么版本,再确认这个版本历史上属于什么补丁或产品,最后反过来寻找当年的安装介质。
十七、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主界面保持中文。

最终文件在这里,供有需要的朋友取用: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.VXDDEFAULT.ECW- 大量DLL
- 大量VXD
- 以及其他系统文件
全部没了。
最后SYSTEM目录里面只剩我准备的那几个文件,Windows当然再也无法启动。

所以,如果你也在Mac上维护Windows98 CF卡:
千万不要把一个叫SYSTEM的文件夹直接拖过去选择“替换”。
正确做法是:
- 打开CF卡原来的
C:\WINDOWS\SYSTEM\ - 再打开保存中文替换文件的目录
- 只把需要替换的几个文件本身拖进去
- 对同名文件进行覆盖
这个坑和驱动完全没有关系。
但如果不知道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 报错
↓
关机
↓
离线替换中文文件
↓
再次启动
这一整套过程。
二十三、如果让我重新安装一次,我会采用这个顺序
如果以后再从零安装这台机器,我会固定采用:
- Windows98SE 简体中文版
- Intel Chipset INF 6.2.1.1001
- DirectX 8.1
- NVIDIA Detonator 45.23
- Creative原版 Sound Blaster Live! / Live!Ware
SBLW9XUP.EXE- 3Com 3C905C-TX-M
- 设置固定 IP,避免 DHCP 导致开机长时间等待
- 如需要,在
CONFIG.SYS设置EMM386.EXE NOEMS - NECμPD720101/F1USB2.0驱动
- 重启确认USB控制器正常
- NUSB3.3
- 让 NUSB完成第一次重新启动,即使出现 DLL 错误
- 关机,把CF接到另外一台电脑
- 最终覆盖准备好的简体中文
EXPLORER / USER / USER32 / SYSTRAY / HOTPLUG - 装回电脑重新启动
- 测试优盘识别
- 测试安全移除
- 检查系统界面和设备管理器
- 制作最终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、驱动和真实硬件,当年究竟是怎么一起工作的。