Wine Gecko 集成与运行修复总结
Wine Gecko 集成与运行修复总结概述本文档记录了让 ReactOS 加载 Wine Geckoxul.dll所需的全部修改。Wine Gecko 是 MSHTMLInternet Explorer 核心用于渲染 HTML 内容的引擎加载失败会导致浏览器无法显示网页。核心加载路径mshtml.dll 加载时 (DLL_PROCESS_ATTACH) └─ load_gecko() [nsembed.c:742] └─ load_wine_gecko() [nsembed.c:583] ├─ RegOpenKey(HKLM\Software\Wine\MSHTML) ├─ RegOpenKey(2.40) ← 子键 ├─ RegQueryValueExW(GeckoPath) → %SystemRoot%\wine_gecko ├─ ExpandEnvironmentStringsW → C:\ReactOS\wine_gecko [★ 修复1] ├─ check_version() → 验证 VERSION 文件 [★ 修复2] └─ load_xul() → LoadLibraryExW(xul.dll) [★ 修复3,4]修改清单涉及5 个源文件和1 个构建文件共 6 处修改。修复 1mshtml 读取注册表路径未展开 %SystemRoot%文件dll/win32/mshtml/nsembed.c问题load_wine_gecko_v()使用RegQueryValueExW读取 GeckoPath只允许REG_SZ类型且不展开%SystemRoot%。注册表中存储的是%SystemRoot%\wine_gecko但代码直接把它传给CreateFileW和LoadLibraryExW导致路径错误。修复第 571-587 行resRegQueryValueExW(hkey,wszGeckoPath,NULL,type,(LPBYTE)gre_path,size);if(res!ERROR_SUCCESS)returnFALSE;if(typeREG_EXPAND_SZ){PRUnichar expanded_path[MAX_PATH];DWORD expanded_lenExpandEnvironmentStringsW(gre_path,expanded_path,MAX_PATH);if(expanded_len0||expanded_lenMAX_PATH)returnFALSE;strcpyW(gre_path,expanded_path);}elseif(type!REG_SZ){returnFALSE;}支持REG_SZ和REG_EXPAND_SZ两种类型并展开%SystemRoot%。修复 2注册表 GeckoPath 设为 REG_EXPAND_SZ文件boot/bootdata/hivedef.inf问题第 1999 行GeckoPath使用默认的REG_SZ空 flags 字段而路径中含环境变量%SystemRoot%需要标记为REG_EXPAND_SZ才能被识别。修复第 1999 行; 原: HKLM,SOFTWARE\Wine\MSHTML\2.40,GeckoPath,,%SystemRoot%\wine_gecko ; 改: HKLM,SOFTWARE\Wine\MSHTML\2.40,GeckoPath,0x00020000,%SystemRoot%\wine_gecko0x00020000FLG_ADDREG_TYPE_EXPAND_SZREG_EXPAND_SZ。修复 3msvcrt.dll 缺少 xul.dll 所需的 CRT 导出函数文件dll/win32/msvcrt/msvcrt.spec问题Wine Gecko 的 xul.dll 是用 MinGW 编译的导入多个 Microsoft 安全 CRT 函数如__snwprintf_s、_snwprintf_s、_wcslwr_s等。这些函数在 msvcrt.spec 中被-version0x600限制只对 Vista 导出。ReactOS 以--version0x502(WinXP) 构建 msvcrt.dll因此这些函数不在导出表中。修复 A——添加 MinGW 双下划线别名第 930 行 varargs _snwprintf_s(ptr long long wstr) varargs __snwprintf_s(ptr long long wstr) _snwprintf_s ← 新增别名__snwprintf_s转发到_snwprintf_s。修复 B——去掉所有-version0x600版本限制# 去掉 spec 文件中所有 -version0x600 约束(Get-Contentmsvcrt.spec)-replace-version0x600\ ,-replace-version0x600\,涉及约 180 个函数包括_snwprintf_s、_wcslwr_s、_snprintf_s、strcpy_s、wcscpy_s、memcpy_s、fopen_s等全部安全 CRT 函数。修复 4kernel32.dll 缺少 GetSystemTimePreciseAsFileTime文件dll/win32/kernel32/client/time.c问题xul.dll 调用GetSystemTimePreciseAsFileTime该函数在 ReactOS 中只有STUB;空实现导致 xul.dll 加载失败c0000139。修复第 141-153 行VOID WINAPIGetSystemTimePreciseAsFileTime(OUT PFILETIME lpFileTime){LARGE_INTEGER SystemTime;NtQuerySystemTime(SystemTime);lpFileTime-dwLowDateTimeSystemTime.u.LowPart;lpFileTime-dwHighDateTimeSystemTime.u.HighPart;}NtQuerySystemTime和FILETIME使用相同的格式1601 年以来的 100ns 间隔直接赋值即可。修复 5构建系统将 wine_gecko 放入 ISO文件modules/CMakeLists.txt问题wine_gecko 文件通过add_cd_file(FOR bootcd)进入reactos.cab但安装程序 (USETUP) 不会自动提取 CAB 中所有文件到目标系统导致安装后%SystemRoot%\wine_gecko\目录缺失。修复第 53-81 行改用NO_CAB文件直接放在 ISO 的i386/wine_gecko/路径下在txtsetup.sif中添加目录 ID 和文件条目安装时由 USETUP 自动复制到%SystemRoot%\wine_gecko\add_cd_file(FILE .../wine_gecko/xul.dll DESTINATION reactos/wine_gecko NAME_ON_CD xul.dll NO_CAB ← 关键不打包进 CAB FOR bootcd livecd regtest)修复 6txtsetup.sif 添加 wine_gecko 文件复制规则文件boot/bootdata/txtsetup.sif问题安装程序不知道 wine_gecko 文件需要复制到目标系统。修复 A——添加目录 ID 映射第 41-45 行[Directories] 82 wine_gecko 88 wine_gecko\dictionaries 89 wine_gecko\gmp-clearkey\0.1 90 wine_gecko\gmp-fake\1.0 91 wine_gecko\gmp-fakeopenh264\1.0修复 B——添加 27 条文件条目第 145-171 行[SourceDisksFiles] ; Wine Gecko 根目录文件 (目标目录 82) xul.dll 1,wine_gecko,,,,,,82,,,,1,82 VERSION 1,wine_gecko,,,,,,82,,,,1,82 omni.ja 1,wine_gecko,,,,,,82,,,,1,82 freebl3.dll 1,wine_gecko,,,,,,82,,,,1,82 mozglue.dll 1,wine_gecko,,,,,,82,,,,1,82 nss3.dll 1,wine_gecko,,,,,,82,,,,1,82 ... ; 字典文件 (目标目录 88) en-US.aff 1,wine_gecko\dictionaries,,,,,,88,,,,1,88 en-US.dic 1,wine_gecko\dictionaries,,,,,,88,,,,1,88 ; GMP 插件 (目标目录 89-91) clearkey.dll 1,wine_gecko\gmp-clearkey\0.1,,,,,,89,,,,1,89 ...涉及文件完整列表#文件修改类型说明1dll/win32/mshtml/nsembed.c修复展开%SystemRoot%支持 REG_EXPAND_SZ2boot/bootdata/hivedef.inf修复GeckoPath 改为 REG_EXPAND_SZ3dll/win32/msvcrt/msvcrt.spec修复去掉全部-version0x600约束 添加__snwprintf_s别名4dll/win32/kernel32/client/time.c实现GetSystemTimePreciseAsFileTime5modules/CMakeLists.txt修复wine_gecko 改用 NO_CAB6boot/bootdata/txtsetup.sif修复添加目录 ID 和文件复制条目构建与测试# 1. 配置 CMake确保 wine_gecko 文件被 GLOB 识别cd D:\reactos cmake-G Ninja-DCMAKE_TOOLCHAIN_FILEtoolchain-mingw32.cmake-DARCHi386-S.-B output-MinGW-i386# 2. 构建ninja-C output-MinGW-i386-j 20 bootcd# 3. 输出文件# output-MinGW-i386/bootcd.iso ← 新 ISO含 wine_gecko# output-MinGW-i386/dll/ntdll/ntdll.dll ← 新 ntdll去掉 LDR 日志# output-MinGW-i386/dll/win32/kernel32/kernel32.dll ← 新 kernel32# output-MinGW-i386/dll/win32/msvcrt/msvcrt.dll ← 新 msvcrt# 4. 不重装的快速测试需要 PE 启动盘复制:copyoutput-MinGW-i386\dll\ntdll\ntdll.dll C:\ReactOS\system32\copyoutput-MinGW-i386\dll\win32\kernel32\kernel32.dll C:\ReactOS\system32\copyoutput-MinGW-i386\dll\win32\msvcrt\msvcrt.dll C:\ReactOS\system32\ md C:\ReactOS\wine_gecko xcopy/E D:\reactos\modules\optional\wine_gecko\*.*C:\ReactOS\wine_gecko\调试日志说明日志内容含义对应阶段Could not open VERSION fileVERSION 文件未找到check_versionCould not load XUL: %dxul.dll 加载失败依赖缺失load_xulUnexpected version %sVERSION 文件内容不匹配check_versionxul.dll failing with c0000139缺少 CRT 导出函数LoadLibraryExWCould not load wine-gecko以上任一阶段失败load_geckoFailed to init Gecko, returning CLASS_E_CLASSNOTAVAILABLEGecko 初始化失败init_xpcom

相关新闻

人形机器人工业落地准入指南:认证标准、硬核能力与产线适配

人形机器人工业落地准入指南:认证标准、硬核能力与产线适配

1. 项目概述:这不是玩具,是正在落地的“新工种”载体最近在几个工业自动化展会现场,我连续三天被同一个问题围住:“老师,这台人形机器人,能进我们产线替人拧螺丝吗?”问的人有汽车厂的班组长、电…

2026/10/19 16:24:10 阅读更多 →
人形机器人续航瓶颈:系统级能耗优化实战指南

人形机器人续航瓶颈:系统级能耗优化实战指南

1. 为什么人形机器人一走动就“电量告急”?不是电池小,是系统在烧电“人形机器人续航只有47分钟”——这条消息去年在某科技展上被现场观众拍下视频传开后,评论区清一色是“还不如我家扫地机”。但真正做过本体控制开发的工程师看到这个数字&…

2026/10/19 13:10:10 阅读更多 →
自动驾驶端到端研发范式切分:从黑箱训练到白盒演进

自动驾驶端到端研发范式切分:从黑箱训练到白盒演进

1. 项目概述:为什么“端到端算法研发范式切分”是当前自动驾驶落地的关键卡点“自动驾驶端到端 算法研发范式切分”这个标题乍看像一句技术黑话,但拆开来看,它直指行业最真实、最紧迫的工程矛盾——不是模型能不能跑通,而是研发流…

2026/10/19 4:22:24 阅读更多 →

最新新闻

鸿蒙ArkTS生鲜超市实战项目解析与避坑指南

鸿蒙ArkTS生鲜超市实战项目解析与避坑指南

简介:本资源是一套基于华为鸿蒙操作系统(HarmonyOS)开发的生鲜超市行业应用实战项目,面向Android开发者转型鸿蒙生态、高校学生学习分布式应用开发及企业级HarmonyOS项目实践者。项目聚焦线上线下融合购物场景,完整呈现…

2026/10/20 20:58:45 阅读更多 →
Chrome链接总是覆盖当前页?教你设置自动在新标签页打开

Chrome链接总是覆盖当前页?教你设置自动在新标签页打开

"每次点链接都把当前页覆盖掉,后来越来越烦"——这个需求我收到过太多次了。Chrome 默认点击链接就在当前标签页打开,想在新标签页打开,要么按着 Ctrl 点,要么右键菜单选"在新标签页中打开链接"。一次两次还行…

2026/10/20 20:58:45 阅读更多 →
LMDeploy实战:开源大模型量化、推理与OpenAI兼容服务部署

LMDeploy实战:开源大模型量化、推理与OpenAI兼容服务部署

这段时间一直在折腾开源大模型的落地部署,试了不少推理框架,最后在业务环境里稳定跑下来的是 LMDeploy。如果你也在做类似的事情——想把 Qwen、Llama 这类开源模型接到自己的系统里,或者想在项目里做一个带 API 的聊天服务,那么这…

2026/10/20 20:58:45 阅读更多 →
Windows cmd进入指定目录全攻略:cd命令、跨盘符与批处理技巧

Windows cmd进入指定目录全攻略:cd命令、跨盘符与批处理技巧

Windows 下在 cmd 里进指定目录,这事看起来简单到不值一提,但实际操作中我见过太多人在这一步卡住——输入cd D:\某文件夹没反应,路径一长就报错,带空格的目录怎么都进不去,还有一个很经典的cd后提示「不是内部或外部命…

2026/10/20 20:58:45 阅读更多 →
LMDeploy 大模型部署实战:从模型量化到API服务全流程指南

LMDeploy 大模型部署实战:从模型量化到API服务全流程指南

之前帮某开发者的“模拟项目X”做大模型部署时,我在 GPU 服务器上对比过好几套推理方案,踩完一圈坑之后,现在手里的长期方案基本固定成了 LMDeploy。如果你手里已经有一个开源对话模型,正打算放进业务里做 API 服务,或…

2026/10/20 20:58:45 阅读更多 →
TensorFlow鞋类识别实战:Fashion MNIST图像分类全流程

TensorFlow鞋类识别实战:Fashion MNIST图像分类全流程

前段时间重新整理之前的深度学习实验笔记,翻到鞋类识别(Fashion MNIST)这个项目时,觉得特别值得拿出来单独写一篇。原因很简单:很多人入门深度学习时,都会被建议先跑通手写数字识别(MNIST&#…

2026/10/20 20:57:37 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →