资源实用工具
本主题介绍用于生成 MUI 应用程序的两个实用工具。 虽然 MUIRCT 是特定于 MUI 的工具,但 MUI 还使用标准的 Windows RC 编译器实用工具。 本地化资源和生成应用程序中提供了使用这些实用工具的说明。
MUIRCT 实用工具
MUIRCT (Muirct.exe) 是一个命令行实用工具,用于将标准可执行文件拆分为 LN 文件和特定于语言(即可本地化)的资源文件。 每个生成的文件都包含用于文件关联的资源配置数据。 MUIRCT 包含在适用于 Windows Vista 的 Microsoft Windows SDK 中。
注意
从 Windows Vista 开始,Win32 资源加载程序将更新为从特定于语言的文件以及 LN 文件加载资源。
MUIRCT 用法
根据rc_config文件将二进制文件拆分为主二进制文件和 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]
从checksum_file提取校验和并将其插入到output_file中。
Muirct -c checksum_file [-b LangID] -e output_file
根据checksum_file计算校验和并将其插入到output_file中。
Muirct -c checksum_file [-b LangID] -q rc_config -z output_file
从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,或者 -b 开关指定的语言在checksum_file中找不到,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 文件中包含的资源信息(类型、名称、语言标识符)。 默认值为 1 -v |
-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 根据以下顺序选择“UltimateFallbackLanguage”属性值以从最高优先级到最低的顺序插入 LN 文件资源配置数据:
- 源资源配置文件中的“UltimateFallbackLanguage”属性(如果作为输入传入)。
- 使用 -g 开关指定的语言。
- 输入文件语言。
MUIRCT 根据以下顺序选取要在 .mui 文件资源配置数据中插入的“language”属性值:
- 源资源配置文件中的“language”属性(如果作为输入传入)。
- 由 -x 开关(强制语言)指定的语言。
- 输入文件语言。
MUIRCT 校验和处理
除非通过资源配置文件指定校验和,否则作系统通常会根据文件中的语言特定资源计算校验和。 只要 LN 文件和所有关联的特定于语言的资源文件的校验和相同,并且 LN 中的资源配置中的语言属性和语言依赖匹配,资源加载程序就可以成功加载资源。
MUIRCT 支持多种方法,用于在资源配置数据中放置适当的校验和:
- 为每个语言生成一个可执行文件,其中包含代码和资源。 之后,使用 MUIRCT 将其中每个文件拆分为 LN 文件和特定于语言的资源文件。 MUIRCT 多次运行,一次,为每个语言生成一个资源文件。 可以通过以下方式执行生成:
- 使用 -q 开关在资源配置文件中指定校验和值。 MUIRCT 会将此值置于生成的所有 LN 文件和特定于语言的资源文件中。 需要采用一种策略来选择此值,如本主题后面部分所述。
- 使用 -c 开关(以及(可选)-b 开关)选择具有 MUIRCT 从中提取校验和的资源的单个语言。
- 使用 -z 开关选择具有 MUIRCT 始终提取校验和的资源的单种语言。 使用其他方法生成文件后应用此校验和。
- 为单个语言生成包含代码和资源的可执行文件。 之后,使用 MUIRCT 在 LN 文件和特定于语言的资源文件之间拆分资源。 最后,使用二进制本地化工具修改每种语言生成的资源文件。
校验和处理的最常见约定是基于英语(美国)资源的校验和。 只要每个 LN 文件采用一致,就可以自由采用不同的约定。 例如,只要所有应用程序都有法国(法国)资源(法国)资源(基于校验和)构建的软件的校验和,那么软件开发企业完全可以接受。 也可以使用资源配置文件将任意十六进制值分配最多 16 个十六进制数字作为校验和。 最后一个策略排除了有效使用 MUIRCT 的 -z、-c 和 -b 开关。 它需要使用 GuidGen 或其他工具采用方法来生成校验和值。 此策略还要求你设置一个策略,用于确定何时在添加新的可本地化资源时修改值。
若要对所有文件应用英语(美国)校验和,可以使用上述任何校验和处理方法。 例如,可以为英语(美国)生成 LN 文件和特定于语言的资源文件,然后使用 MUIRCT -d 开关获取生成的校验和。 可以将此校验和复制到资源配置文件中,并使用 MUIRCT -q 开关将校验和应用于所有其他文件。
将资源配置文件与 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 switch 的 LN 文件输出 示例
下面是使用 MUIRCT 的 -d 开关从 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 Switch 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 编译器(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 或 -? | 显示帮助屏幕。 |
-调频 | 将指定的资源文件用于特定于语言的资源。 通常,资源编译器会创建特定于语言的资源文件。 但是,如果存在以下任何条件,则它不会创建该文件:
|
-q | 使用指定的资源配置文件获取资源类型以放置在特定于语言的资源文件和 LN 文件中。 有关详细信息,请参阅 准备资源配置文件。 作为此开关的替代方法,可以使用 -j 和 -k 开关,但首选使用资源配置文件。 通过在资源配置文件中使用 -q 开关,可以实现基于项的拆分,并提供最终将在 LN 和特定于语言的资源文件中使用二进制资源配置的属性。 无法使用 -j 和 -k 开关进行此拆分。 注意:如果在不同的资源配置文件中存储资源和版本信息,则 RC 编译器拆分过程无法正常工作。 在这种情况下,RC 编译器不会拆分版本信息。 因此,链接器错误发生在特定于语言的资源文件的链接过程中,因为该文件没有版本资源。 |
-g | 指定十六进制中的最终 回退语言 标识符。 |
-g1 | 即使 VERSION 资源是唯一可本地化的内容,也创建 MUI .res 文件。 默认情况下,如果 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 元素中复制该条目。
相关主题