64 位注意事项

随着 64 位 Windows 的日益可用性,用户期望使用各种语言的国际键盘或东亚语言的输入法编辑器(IME)能够正常使用 32 位和 64 位应用程序。 为 Microsoft Windows 开发输入法组件或文本服务时,请务必将 64 位 Windows 视为产品的潜在目标平台。

由于 IME 和文本服务(基于文本服务框架)通常作为动态链接库(DLL)实现,因此请务必注意,DLL 专为在 32 位环境或 64 位环境中使用而构建;在 32 位环境中生成的 DLL 不能由 64 位应用程序使用,反之亦然。

注意

WOW64 不会缓解此特定于位的 DLL 限制。 有关 WOW64 的信息,请参阅 运行 32 位应用程序

 

本主题讨论开发 64 位 Windows 上使用的 IME 和文本服务的重要设计注意事项。

64 位 IME 注意事项

本部分介绍生成用于 64 位 Windows 的 IME 的特殊注意事项。 有关 IME 的信息,请参阅 输入法编辑器

生成 IME 的 32 位和 64 位版本

由于前面提到的 32 位/64 位 DLL 兼容性问题,因此必须采取一些预防措施,以确保 IME 在 64 位 Windows 上运行的任何应用程序(32 位或 64 位)以透明方式工作。 在 64 位平台上使 IME 能够透明地使用 32 位和 64 位应用程序的建议解决方案是生成和安装并行 32 位和 64 位版本的 IME DLL。 通常,开发人员通过在生成环境中调整目标平台设置,从单个源生成并行 DLL。 有关单源 32 位和 64 位应用程序的详细信息,请参阅 准备 64 位 Windows

并行安装 64 位和 32 位输入法编辑器

IME 和文本服务的开发人员应了解本主题中介绍的 64 位注意事项。 幸运的是,这些服务的最终用户不需要关注这些特定于实现的详细信息。 64 位 Windows 的一项功能是能够隐藏最终用户对 64 位和 32 位特定版本的 IME DLL 的需求。 当这两个版本的 IME 以并行方式正确安装时,64 位 Windows 可识别 IME 的 64 位和 32 位版本,并将这些特定于位的 IME 作为单个 逻辑 IME 呈现给最终用户。 当最终用户需要使用 IME 时,64 位 Windows 以透明方式选择适合给定情况的 IME(32 位或 64 位)版本。

若要并行安装 64 位和 32 位 IME 才能正常运行(也就是说,若要将两个特定于平台的 DLL 表示为用户的单个逻辑 IME),必须满足以下条件:

  • 开发人员必须生成特定于平台的版本(一个用于 32 位 Windows,一个用于 IME DLL 的 64 位 Windows)。
  • 32 位和 64 位 DLL 必须共享相同的文件名。
  • 必须遵循安装目录要求。 有关详细信息,请参阅安装目录要求。

32 位和 64 位 IME DLL 的并行安装共享用于存储配置数据的同一注册表项(包括 DLL 文件名):

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts

ImmInstallIME 函数用于创建此注册表项。 IME 的安装程序和安装程序必须调用此函数,以将 IME 注册为受支持的键盘布局。 ImmInstallIME 函数只能从 IME DLL 的 32 位或 64 位版本调用一次。

不匹配的 IME DLL

建议也不支持在 64 位 Windows 上安装 IME 的 32 位版本。 如果 64 位应用程序尝试加载 32 位 IME,当应用程序尝试加载关联的键盘布局时,IME 会以无提示方式失败。

重要

发生 64 位应用程序/32 位 IME 冲突错误时,不会显示任何警告对话框或消息。

 

文本服务的 64 位注意事项

本部分介绍生成文本服务以用于 64 位环境的特殊注意事项。 有关文本服务和文本服务框架的详细信息,请参阅 文本服务框架

生成 32 位和 64 位文本服务

文本服务作为 DLL 上公开的组件对象模型(COM)对象实现。 因此,32 位/64 位 DLL 冲突可能发生在 64 位 Windows 上安装的文本服务。 与 IME 一样,允许文本服务在 64 位平台上使用 32 位和 64 位应用程序以透明方式工作的建议解决方案是生成和安装文本服务 DLL 的并行 32 位和 64 位版本。

并行安装 64 位和 32 位文本服务

若要并行安装 32 位版本和 64 位版本的文本服务,并将其表示为单个逻辑文本服务,必须满足以下条件:

  • 这两个版本的文本服务在向 COM 子系统注册时都指定相同的类标识符(CLSID)。
  • 这两个版本的文本服务都是独立注册的。 有关详细信息,请参阅 注册 COM 应用程序

向 64 位 Windows 注册 32 位文本服务时,注册作将透明地重定向到以下注册表项:

HKEY_CLASS_ROOT\Wow6432Node\CLSID

注册表重定向程序

HKEY_LOCAL_MACHINE\Software\Microsoft\CTF\TIP

ITfInputProcessorProfiles文本服务注册

64 位版本和 32 位版本的文本服务可能同时使用。 如果两个版本的文本服务都需要作任何共享对象,则应将访问共享对象的协调设计到文本服务中。 每个文本服务都负责管理使用或需要的任何共享对象。

在 64 位 Windows 上安装 32 位文本服务

不建议也不支持在 64 位 Windows 平台上安装 32 位版本的文本服务。 由于在 64 位 Windows 平台上执行的注册映射,64 位应用程序可以通过 ITfInputProcessorProfiles 接口枚举 32 位文本服务的服务。 但是,如果 64 位应用程序尝试加载 32 位文本服务,则加载会以无提示方式失败。

重要

当发生 64 位应用程序/32 位文本服务冲突错误时,不会显示任何警告对话框或消息。

 

其他注意事项

安装目录要求

本部分介绍安装 IME 和文本服务二进制文件的位置的要求。 如果未遵循这些要求,则文本服务或 IME 可能无法正常工作。

IME DLL

在 64 位 Windows 平台上,在以下目录中安装 32 位和 64 位 IME DLL:

文本服务 DLL 和相关二进制文件

在 64 位 Windows 平台上,在以下目录中安装 32 位和 64 位文本服务 DLL 以及与文本服务或 IME 相关的任何其他二进制文件:

  • 在 Program Files (x86) 目录中的子目录中安装 32 位文本服务 DLL 和任何其他 32 位二进制文件;使用 CSIDL_PROGRAM_FILESX86 调用 SHGetFolderPath 以检索此目录路径。 或者,对于 Windows Installer,请使用 ProgramFilesFolder 属性。
  • 在 Program Files 目录下的子目录中安装 64 位文本服务 DLL 和任何其他 64 位二进制文件;使用 CSIDL_PROGRAM_FILES 调用 SHGetFolderPath 来检索此目录路径。 或者,对于 Windows Installer,请使用 ProgramFiles64Folder 属性。

如果不使用 Windows Installer 包安装 IME 或文本服务,则强烈建议你使用 64 位安装应用程序。 WOW64 文件系统重定向程序可能会导致 32 位安装程序将文件放置在错误的目录中(例如,WOW64 文件系统重定向可能导致将 System32 目录的文件安装到 SysWOW64 目录中)。 如果必须使用 32 位安装程序,请在安装过程中禁用 WOW64 文件重定向,以确保文件重定向程序服务不会在安装过程中导致任何意外重定向。 有关 WOW64 文件系统重定向程序的信息,请参阅 文件系统重定向程序。 有关如何禁用或启用 WOW64 文件系统重定向的信息,请参阅 Wow64EnableWow64FsRedirection

提示

避免硬编码安装路径。 有关详细信息,请参阅 使用应用程序编程接口查找目录,而不 Hard-Coded 路径

 

重要

不要在特殊目录中安装任何 IME 或文本服务文件 %WINDIR%\IME(默认情况下,c:\Windows\IME)。 此目录包含支持文本服务和 IME 的系统文件;它不打算包含任何第三方 IME 或文本服务文件,并且此目录不支持 WOW64 文件系统重定向。

 

双 Ctfmon.exe 进程在 64 位 Windows 平台上运行

ctfmon.exe 过程管理桌面上的文本服务框架,并提供语言栏用户界面(UI)。 在 64 位 Windows 上,32 位版本和 64 位版本的 ctfmon.exe 进程同时运行。 64 位 ctfmon.exe 进程管理 64 位文本服务,同样,32 位 ctfmon.exe 进程管理 32 位文本服务。

不同版本的语言栏 UI 的显示行为

在 64 位 Windows 上,仅显示与 64 位版本文本服务关联的语言栏 UI。 如果 32 位应用程序使用 32 位版本的文本服务,64 位 Windows 会自动插入等效 64 位文本服务的语言栏 UI。 这可确保 32 位文本服务无需执行特殊工作才能显示在语言栏的 64 位版本中。

64 位 Windows 上的控制面板注意事项

64 位 Windows 通过控制面板提供对 32 位和 64 位版本文本服务和 IME 的访问权限。 若要访问特定版本的文本服务或 IME 的控制面板设置,请查看以下位置。

  • 32 位文本服务和 IME 的控制面板访问: 开始 -> 设置 -> 控制面板 -> 视图 x86 控制面板图标
  • 64 位文本服务和 IME 的控制面板访问: 开始 -> 设置 -> 控制面板 -> 区域和语言选项

在某些情况下,某些设置可能只能通过 32 位控制面板使用。 在这些情况下,请确保文本服务或 IME 的用户可以通过在 64 位设置界面中提供适当的文档或提供 UI 提示来了解这一点。