首页
/ Mozc项目中64位安装程序注册表写入问题的分析与修复

Mozc项目中64位安装程序注册表写入问题的分析与修复

2025-06-30 04:24:41作者:滕妙奇

背景介绍

Mozc项目是一个开源的日语输入法引擎,当使用特定品牌配置(BRANDING=GoogleJapaneseInput)构建时,其64位安装程序(GoogleJapaneseInput64.msi)需要为Google的Omaha更新系统创建特定的注册表项。这些注册表项的正确位置对于Omaha系统的正常运行至关重要。

问题现象

在最近的版本更新中,开发团队发现64位安装程序将Omaha相关的注册表项错误地写入了64位系统路径,而非预期的32位兼容路径。具体表现为:

  • 预期路径应为:HKLM\Software\WOW6432Node\Google\Update\...
  • 实际写入路径为:HKLM\Software\Google\Update\...

这种错误导致Omaha更新系统无法正确识别已安装的Google日语输入法,进而影响了自动更新功能和安装后对话框的显示。

技术分析

这个问题源于Windows注册表的32/64位兼容性机制。在64位Windows系统中:

  1. 32位应用程序默认访问HKLM\Software\WOW6432Node路径
  2. 64位应用程序默认访问HKLM\Software路径
  3. Omaha作为32位应用程序,期望在WOW6432Node路径下查找配置信息

在从WiX v3迁移到v4的过程中,安装程序失去了对注册表写入位置的精确控制,导致64位安装程序将配置信息写入了错误的注册表路径。

解决方案

针对这一问题,技术团队提出了明确的修复方案:

  1. 在WiX安装脚本中为Omaha相关的注册表组件添加Bitness="always32"属性
  2. 确保这些注册表项始终被写入32位兼容路径(WOW6432Node)

具体修改涉及两个组件:

  • OmahaRegister组件:负责写入基本的版本和配置信息
  • OmahaRegLaunchCmdLine组件:负责写入安装后启动命令

影响评估

这一修复主要影响以下方面:

  1. 新安装用户:将正确获得Omaha更新支持和安装后对话框
  2. 现有用户:由于GoogleJapaneseInputSetup.exe也会写入正确的注册表位置,大多数用户不会受到影响
  3. 不同品牌构建:仅影响GoogleJapaneseInput品牌构建,Mozc品牌构建不受影响

技术细节

在Windows安装技术中,Bitness属性控制着注册表写入行为:

  • 未指定:遵循安装程序本身的位数(64位安装程序写入64位路径)
  • always32:强制写入32位兼容路径(WOW6432Node)
  • always64:强制写入64位路径

这一修复体现了Windows平台下32/64位兼容性处理的重要性,特别是在混合位数环境中。

登录后查看全文
热门项目推荐