资源实用工具

本主题介绍用于生成 MUI 应用程序的两个实用工具。 虽然 MUIRCT 是特定于 MUI 的工具,但 MUI 还使用标准 Windows RC 编译器实用工具。 本地化资源和生成应用程序中提供了使用这些实用工具的说明。

MUIRCT 实用工具

MUIRCT (Muirct.exe) 是一个命令行实用工具,用于将标准可执行文件拆分为 LN 文件和特定于语言的 (,即可本地化) 资源文件。 生成的每个文件都包含用于文件关联的资源配置数据。 MUIRCT 包含在 Windows Vista 的Microsoft Windows SDK中。

注意

从 Windows Vista 开始,Win32 资源加载程序将更新为从特定于语言的文件以及 LN 文件加载资源。

 

MUIRCT 用法

  1. 根据rc_config文件将二进制文件拆分为main二进制文件和 mui 文件。

    Muirct -q rc_config [-c checksum_file [-b LangID]] [-x LangID] [-g LangId] [-f] [-m] [-v level] source_file [output_LN_file] [output_MUI_file]

  2. 从checksum_file提取校验和并将其插入output_file。

    Muirct -c checksum_file [-b LangID] -e output_file

  3. 根据checksum_file计算校验和并将其插入output_file。

    Muirct -c checksum_file [-b LangID] -q rc_config -z output_file

  4. 从input_file转储资源配置数据内容。

    Muirct -d input_file

MUIRCT 语法

MUIRCT 可以从命令行开关和/或从使用 -q 开关指定的资源配置文件中获取方向。

muirct [-h|-?] [ -c checksum_file] [-b langid]  ]
     [-g langid] [-q resource configuration file<RCF>] [-v level] [-x langid]
     [-e output_file]  [-z output_file] [-f] [-d MUI'ized file] [-m file_version]

source_filename [language_neutral_filename] [mui_filename]

开关和参数

选项 目标
-h 还是 -? 显示帮助屏幕。
-c 指定要从中提取或计算资源校验和的输入checksum_file。 Checksum_file必须是包含可本地化资源的 Win32 二进制文件。 如果checksum_file包含多种语言的资源,则必须使用 -b 开关来指定应使用哪些资源,否则 MUIRCT 将失败。
-b 指定使用 -c 指定的checksum_file包含多种语言的资源时要使用的语言。 此开关只能与 -c 开关结合使用。 语言标识符可以采用十进制或十六进制格式。 如果checksum_file包含多种语言的资源且未指定 -b,或者在checksum_file中找不到 -b 开关指定的语言,MUIRCT 将失败。
-g 指定要作为最终回退语言包含在 LN 文件的资源配置数据部分中的语言 ID。 如果资源加载程序无法从线程首选 UI 语言加载请求的 .mui 文件,它将使用最终回退语言作为其最后一次尝试。 LangID 值可以十进制或十六进制格式指定。 例如,英语 (美国) 可由 -g 0x409 或 -g 1033 指定。
-q 指定根据rc_config文件布局将source_file拆分为output_LN_file和output_MUI_file。 rc_config 文件是一个 XML 格式化文件,用于指定哪些资源将提取到 .mui 文件,以及哪些资源将保留在 LN 文件中。 rc_config可以指定资源类型和单个命名项在output_LN_file与output_MUI_file之间的分布。 source_file必须是包含单一语言资源的 Win32 二进制文件,否则 MUIRCT 将失败。 如果文件是中性语言,则 MUIRCT 不会拆分该文件,该文件中只有语言 ID 值 0。 output_LN_file和output_mui_file是source_file拆分到的中性语言和 .mui 文件的名称。 这些文件名是可选的。 如果未指定,MUIRCT 会将扩展 .ln 和 .mui 追加到source_file。 通常,应在部署文件之前删除“.ln”扩展名。 MUIRCT 根据source_file名称和文件版本计算校验和,并将结果插入每个输出文件的资源配置节,从而关联output_LN_file和output_MUI_file。 与 -c 开关结合使用时,优先使用 -q 开关。 如果随 -q 开关一起提供的rc_config文件包含校验和 MUIRCT 会忽略 -c 开关,并从值中插入校验和值,rc_config 文件到 LN 和.mui 文件中。 如果在rc_config中找不到校验和值,MUIRCT 将根据 -c 开关的行为计算资源校验和。
-v 指定日志记录的详细级别。 指定 1 可打印所有基本错误消息和操作结果。 指定 2 还将包含 .mui 文件和 LN 文件中包含的资源信息 (类型、名称、语言标识符) 。 默认值为 -v 1
-X 指定 MUIRCT 用于标记添加到 .mui 文件的资源节的所有资源类型的语言 ID。 LangID 值可以十进制或十六进制格式指定。 例如,英语 (美国) 可由 -x 0x409 或 -x 1033 指定。
-E 提取随 -c 开关提供的checksum_file中包含的资源校验和,并将其插入指定的output_file中。 指定 -e 时,MUIRCT 将忽略除 -c 开关以外的所有开关。 在这种情况下,checksum_file必须是一个 Win32 二进制文件,其中包含具有校验和值的资源配置数据节。 output_file必须是现有的 LN 文件或 .mui 文件。
-Z 在指定的输出文件中计算和插入资源校验和数据。 MUIRCT 基于随 -c 开关和可选 -b 开关提供的输入进行校验和计算。 如果为不存在的 -z 开关指定输出文件,MUIRCT 将退出并失败。
示例:基于 Notepad.exe 中的可本地化资源计算校验和,并将校验和插入输出文件 Notepad2.exe。
muirct -c notepad.exe -q myprog.rcconfig -z notepad2.exe
-f 允许创建 .mui 文件,其中版本资源是唯一可本地化的资源。 默认情况下,MUIRCT 不允许这样做。
-d 在源文件中查找并显示嵌入的资源配置数据。 指定此开关时,MUIRCT 将忽略所有其他命令行选项。
-M 指定在计算用于关联output_LN_file和output_MUI_file的校验和时使用的版本号。
source_filename 本地化的二进制源文件的名称;不能使用通配符。 此文件只能包含一种语言的资源。 如果文件中存在多种语言的资源,MUIRCT 将失败,除非使用 -b 开关。 如果文件包含的语言标识符仅为 0 的资源,MUIRCT 不会拆分文件,因为语言标识符为 0 表示非特定语言。
对于 -d 开关,source_filename是 LN 文件或特定于语言的资源文件,MUIRCT 将为其显示资源配置数据。
language_neutral_filename 可选。 LN 文件的名称。 如果未指定此文件的名称,MUIRCT 会将第二个扩展名“.ln”追加到源文件中,以用作非特定语言文件名。 通常,应在部署文件之前删除“.ln”扩展名。 注意: LN 文件不应包含字符串或菜单。 应手动删除它们。
mui_filename 可选。 特定于语言的资源文件的名称。 如果未指定名称,MUIRCT 会将第二个扩展名“.mui”追加到要用作文件名的源文件名。通常,MUIRCT 会创建特定于语言的资源文件。 但是,如果存在以下任一条件,则不会创建资源文件:
  • 原始二进制文件中没有可本地化的资源。
  • 在原始二进制文件中找到的唯一资源语言是非特定语言。
  • 原始二进制文件具有多种语言的资源,不包括非特定语言。 如果二进制文件包含两种语言的资源,其中一种语言是非特定语言,则实用工具会将该文件视为单语,并在存在可本地化资源时创建特定于语言的资源文件。

 

MUIRCT 语言输出

MUIRCT 根据从高优先级到最低的顺序选择要插入 LN 文件资源配置数据的“UltimateFallbackLanguage”属性值:

  1. 源资源配置文件中的“UltimateFallbackLanguage”属性(如果作为输入传入)。
  2. 使用 -g 开关指定的语言。
  3. 输入文件语言。

MUIRCT 根据以下顺序选择要插入 .mui 文件资源配置数据的“language”属性值:

  1. 源资源配置文件中的“language”属性(如果作为输入传入)。
  2. 由 -x 开关指定的语言 (强制语言) 。
  3. 输入文件语言。

MUIRCT 校验和处理

除非通过资源配置文件指定校验和,否则操作系统通常会计算文件中特定于语言的资源的校验和。 只要 LN 文件和所有关联的特定于语言的资源文件的校验和相同,并且 LN 中的资源配置中的 language 属性与语言相关匹配,资源加载程序就可以成功加载资源。

MUIRCT 支持多种方法在资源配置数据中放置适当的校验和:

  1. 为每种语言生成一个可执行文件,其中包含代码和资源。 之后,使用 MUIRCT 将其中每个文件拆分为 LN 文件和特定于语言的资源文件。 MUIRCT 运行多次,一次为每种语言生成资源文件。 可以通过以下方式执行生成:
    1. 使用 -q 开关在资源配置文件中指定校验和值。 MUIRCT 将此值置于生成的所有 LN 文件和特定于语言的资源文件中。 你需要采用策略来选择此值,如本主题后面部分所述。
    2. 使用 -c 开关 (和 (可选)-b 开关) 选择具有 MUIRCT 从中提取校验和的资源的单个语言。
    3. 使用 -z 开关选择具有 MUIRCT 始终从中提取校验和的资源的单个语言。 使用其他方法生成文件后,应用此校验和。
  2. 生成包含单个语言的代码和资源的可执行文件。 之后,使用 MUIRCT 在 LN 文件和特定于语言的资源文件之间拆分资源。 最后,使用二进制本地化工具修改每种语言的结果资源文件。

校验和处理的最常见约定是将校验和基于英语 (美国) 资源。 只要每个 LN 文件一致,就可以自由采用不同的约定。 例如,软件开发企业完全可以接受其校验和基于法语 (法国) 资源而不是英语 (美国) 资源构建的软件,只要所有应用程序都具有法语 (法国) 资源来建立校验和。 也可以使用资源配置文件将最多 16 个十六进制数字的任意十六进制值指定为校验和。 最后一个策略阻止有效使用 MUIRCT 的 -z、-c 和 -b 开关。 它要求采用使用 GuidGen 或其他工具生成校验和值的方法。 此策略还要求设置一个策略,用于确定在添加新的可本地化资源时何时修改值。

若要将英语 (美国) 校验和应用于所有文件,可以使用上述任何校验和处理方法。 例如,可以为英语 (美国) 生成 LN 文件和特定于语言的资源文件,然后使用 MUIRCT -d 开关获取生成的校验和。 可以将此校验和复制到资源配置文件中,并将 -q 开关与 MUIRCT 配合使用,将校验和应用于所有其他文件。

将资源配置文件与 MUIRCT 配合使用

使用 MUIRCT 时,可以指定资源配置数据。 无论是否显式提供资源配置文件,每个特定于语言的资源文件都具有资源配置数据,与具有关联资源文件的任何 LN 文件一样。 例如:

  • 如果使用 -q 开关指定资源配置文件,但输入源文件中没有可本地化的资源,则不会生成特定于语言的资源文件,并且生成的 LN 文件不包含资源配置数据。 此外,如果输入源文件具有多语言资源,则 MUIRCT 不会拆分该文件。

注意

例如,如果资源配置文件的 neutralResources 元素不包含 resourceType 元素且 localizedResources 元素包含字符串和菜单,则 MUIRCT 的行为不一致。 在这种情况下,MUIRCT 按如下所示拆分资源:

  • 原始二进制 (中的所有资源(包括字符串和菜单) ,以及 MUI 资源)都放置在 LN 文件中。
  • 字符串、菜单和 MUI 资源放置在相应的特定于语言的资源文件中。

 

使用 MUIRCT 的示例

标准用法示例

muirct -q mui.MMF bar.exe barnew.exe barnew.exe.mui

muirct -d myprog.exe.mui

使用 -d 开关的 LN 文件输出示例

下面是使用 -d 开关和 MUIRCT 从 LN 文件输出的资源配置数据的示例,Shell32.dll:

Signature          -    fecdfecd
Length             -    148
RC Config Version  -    10000
FileType           -    11
SystemAttributes   -    100
UltimateFallback location    -  external
Service Checksum   -    14f44a8d86bef14af26d9a885964c935
Checksum           -    f5b3b7ab330439d6fcc07582c3afb613
MainNameTypes      -    AVI FTR ORDERSTREAM TYPELIB UIFILE XML MUI
MainIDTypes        -    1 2 3 12 14 16 24
MuiNameTypes       -    MUI
MuiIDTypes         -    2 3 4 5 6 9 14 16
UltimateFallbackLanguage   -   en-US

使用 -d 开关 Language-Specific 资源文件输出示例

下面是使用 MUIRCT 的 -d 开关从 .mui 文件 Shell32.dll.mui 输出的资源配置数据的示例:

Signature          -    fecdfecd
Length             -     c8
RC Config Version  -    10000
FileType           -    12
SystemAttributes   -    100
Service Checksum   -    14f44a8d86bef14af26d9a885964c935
Checksum           -    f5b3b7ab330439d6fcc07582c3afb613
MainNameTypes      -    MUI
MainIDTypes        -    2 3 4 5 6 9 14 16
Language           -    en-US

RC 编译器实用工具

RC Compiler (Rc.exe) 是一个命令行实用工具,用于将资源定义脚本文件 (.rc 扩展名) 编译为资源文件 (.res 扩展) 。 RC 编译器包含在 Windows SDK 中。 本文档仅说明将 RC 编译器与资源加载程序与 MUI 相关的功能配合使用。 有关编译器的完整信息,请参阅 关于资源文件

RC 编译器允许从单个源集生成 LN 文件和单独的特定于语言的资源文件。 对于 MUIRCT,这些文件由资源配置数据关联。

用于 MUI 资源的 RC 编译器语法

RC 编译器开关在使用 RC 中进行了详细定义。 本部分仅定义用于生成 MUI 资源的开关。 请记住,每个开关不区分大小写。 除非另有说明,否则假定资源类型为非特定语言类型。

rc [-h|-?] -fm mui_res_name [-q rc_config_file_name] [-g langid] [-g1 ] [-g2 version]

开关和参数

选项 函数
-h 还是 -? 显示帮助屏幕。
-调频 对特定于语言的资源使用指定的资源文件。 通常,资源编译器会创建特定于语言的资源文件。 但是,如果存在以下任何条件,则不会创建文件:
  • .rc 文件中没有可本地化的资源。
  • 在 .rc 文件中找到的唯一资源语言是非特定语言。
  • .rc 文件具有多种语言的资源,不包括非特定语言。 如果 .rc 文件包含两种语言的资源,其中一种语言是非特定语言,则编译器会将该文件视为单语。 如果存在任何可本地化的资源,编译器将创建特定于语言的资源文件。
-q 使用指定的资源配置文件获取要放置在特定于语言的资源文件和 LN 文件中的资源类型。 有关详细信息,请参阅 准备资源配置文件。 作为此开关的替代方法,可以使用 -j 和 -k 开关,但最好使用资源配置文件。
通过将 -q 开关与资源配置文件一起使用,可以实现基于项的拆分,并提供最终与 LN 和特定于语言的资源文件中的二进制资源配置一起提供的属性。 无法使用 -j 和 -k 开关进行这种拆分。 注意: 如果将资源和版本信息存储在不同的资源配置文件中,RC 编译器拆分过程将无法正常工作。 在这种情况下,RC 编译器不会拆分版本信息。 因此,链接特定于语言的资源文件期间会发生链接器错误,因为该文件没有版本资源。
-g 以十六进制形式指定最终 回退语言 标识符。
-g1 创建 MUI .res 文件,即使 VERSION 资源是唯一可本地化的内容。 默认情况下,如果 VERSION 是唯一可本地化的资源,RC 编译器不会生成 .res 文件。
-g2 指定计算校验和时要使用的自定义版本号。
mui_res_name 特定于语言的资源的资源文件。
rc_config_file_name 资源配置文件。
langid 语言标识符。
版本 自定义版本号,格式为“6.2.0.0”。

 

使用 RC 编译器生成 MUI 资源的示例

为了说明使用 MUI 资源的 RC 编译器操作,让我们检查资源文件 Myfile.rc 的以下命令行:

rc -fm myfile_res.res -q myfile.rcconfig myfile.rc

此命令行会导致 RC 编译器执行以下操作:

  • 根据 .rc 文件的名称创建特定于语言的资源文件Myfile_res.res 和默认为 Myfile.res 的非特定语言资源文件。
  • 将 2 (项 5 6 7 8 9 10 11 12) 、4、5、6、9、11、16、23、240、1024 MY_TYPE 资源类型添加到特定于语言的 .res 文件中(如果它们位于 .rc 文件中)。
  • 将资源类型 16 以及资源文件中描述的任何其他资源类型添加到非特定语言的 .res 文件和特定于语言的 .res 文件。 请注意,在此示例中,将在两个位置添加资源类型 16。
  • 选择“UltimateFallbackLanguage”属性值,根据以下条件插入 LN 文件资源配置数据,从最高优先级到最低优先级排序:
    • 资源配置文件中的“UltimateFallbackLanguage”属性(如果作为输入传入)。
    • 基于 RC 编译器语言顺序在资源配置数据中插入的语言属性值 (非特定语言和特定于语言的资源文件语言) 。 注意事项包括 .rc 文件中的语言、-gl 开关的语言值以及英语 (美国) 标识符0x0409。

注解

如果在 neutralResources 元素中包含任何 ICON (3) 、DIALOG (5) 、STRING (6) 或 VERSION (16) 资源类型,则必须在资源配置文件的 localizedResources 元素中复制该条目。

多语言用户界面参考

MUI 资源管理

本地化资源和生成应用程序