消息编译器(MC.exe)

消息编译器(mc.exe)用于编译检测清单和消息文本文件。 编译器将生成应用程序链接到的消息资源文件。

MC [-?aAbcdnouUv] [-m <length>] [-h <path>] [-e <extension>] [-r <path>]
   [-x <path>] [-w <file>] [-W <file>] [-z <basename> ] [-cp <encoding>]
   [-km | -um | -generateProjections | -cs <namespace>]
   [-mof] [-p <prefix>] [-P <prefix>]
   [<filename.man>] [<filename.mc>]

注意

消息编译器随 Windows SDK 一起提供,可在 \Bin 文件夹中找到。

消息文本文件和清单文件共有的参数

-?

显示消息编译器的使用信息。

-c

使用此参数让编译器在所有消息 ID 中设置客户位(位 28)。 有关客户位的信息,请参阅 winerror.h。

-cp编码

使用此参数指定用于所有生成的文本文件的字符编码。 有效名称包括“ansi”(默认值)、“utf-8”和“utf-16”。 Unicode 编码将添加字节顺序标记。

-e扩展

使用此参数可指定要用于头文件的扩展名。 最多可以指定三个字符的扩展名,不包括句点。 默认值为 .h。

-h路径

使用此参数可指定要编译器放置生成的头文件的文件夹。 默认值为当前目录。

-m长度

如果任何消息超过 长度 字符,请使用此参数生成警告。

-r路径

使用此参数可以指定希望编译器将生成的资源编译器脚本(.rc 文件)和生成的.bin文件(二进制资源)放置在其中的资源编译器脚本包含的文件夹。 默认值为当前目录。

-z名称

使用此参数替代编译器为生成的文件使用的默认基名称。 默认值是使用 文件名的基名称 输入文件。

文件名

检测清单文件或消息文本文件。 该文件必须存在于当前目录中。 可以指定清单文件、消息文本文件或两者兼有。 文件名必须包含扩展名。 约定是将 .man 扩展名用于清单文件和消息文本文件的 .mc 扩展名。

特定于清单文件的参数

-s路径

使用此参数创建检测基线。 指定包含基线清单文件的文件夹的路径。 对于后续版本,将使用 -t 参数根据基线检查新清单是否存在兼容性问题。

MC 版本 1.12.7051 之前: 不可用

-t路径

在创建新版本的清单时使用此参数,并想要检查它是否与使用 -s 参数创建的基线的应用程序兼容性。 路径必须指向包含 ..基线操作创建的 BIN 文件(请参阅 -s 开关)。

MC 版本 1.12.7051 之前: 不可用

-w路径

编译器忽略此参数并自动验证清单。

MC 版本 1.12.7051 之前: 使用此参数指定包含 Eventman.xsd 架构文件的文件夹,编译器使用该文件来验证清单。 Windows SDK 包含 \Include 文件夹中的 Eventman.xsd 架构文件。 如果未指定此参数,编译器不会验证清单。

-W路径

编译器将忽略此参数。

MC 版本 1.12.7051 之前: 使用此参数指定包含 Winmeta.xml 文件的文件夹。 Winmeta.xml 文件包含已识别的输入和输出类型以及预定义的通道、级别和操作码。 Windows SDK 在 \Include 文件夹中包括 Winmeta.xml 文件。

特定于生成提供程序用于记录事件的代码的参数

可以使用以下编译器参数生成可用于记录事件的内核模式或用户模式代码。 还可以请求编译器生成代码以支持在 Windows Vista 之前在计算机上编写事件。 如果应用程序是 C# 编写的,编译器可以生成可用于记录事件的 C# 类。 这些参数从 MC 版本 1.12.7051 开始提供,该版本随 Windows 7 版本的 Windows SDK 一起提供。

-co

使用此参数让日志记录服务为记录的每个事件调用用户定义函数(该函数在记录事件后调用)。 用户定义的函数必须具有以下签名。

VOID
pFnUserFunction(
    __in REGHANDLE RegHandle,
    __in PCEVENT_DESCRIPTOR Descriptor,
    __in ULONG EventDataCount,
    __in_ecount(EventDataCount) PEVENT_DATA_DESCRIPTOR EventData
    );

还必须在代码中包含以下指令。

#define MCGEN_CALLOUT pFnUserFunction

应尽可能缩短实现,以防止日志记录问题;在函数返回之前,服务将不再记录事件。

可以将此参数与 -km-um 参数配合使用。

-cs命名空间

使用此参数让编译器基于 .NET 3.5 EventProvider 类生成 C# 类。

-css命名空间

使用此参数让编译器基于 .NET 3.5 EventProvider 类生成静态 C# 类。

-km

使用此参数让编译器生成用于记录清单中定义的事件的内核模式代码。

-mof

荒废的。 使用此参数让编译器生成代码,可用于在 Windows Vista 之前记录计算机上的事件。 此选项还会创建一个 MOF 文件,该文件包含清单中定义的每个事件的 MOF 类。 若要在 MOF 文件中注册类,以便使用者可以解码事件,请使用 MOF 编译器(Mofcomp.exe)。 有关使用 MOF 编译器的详细信息,请参阅 托管对象格式

若要使用此开关,必须遵循以下限制:

  • 每个事件定义都必须包括任务和操作码属性
  • 每个任务都必须包括 eventGuid 属性
  • 事件引用不能包含的模板数据:
    • 指定 win:Binary 或 win:SYSTEMTIME 输入类型的数据项
    • 结构
    • 可变大小的数组;但是,可以指定固定长度数组
    • 字符串数据类型无法指定 length 属性

必须将此参数用于 -um-cs-css-km 参数

-p前缀

使用此参数替代编译器用于日志记录宏名称和方法名称的默认前缀。 默认前缀为“EventWrite”。 字符串区分大小写。

可以将此参数与 -um-cs-css-km 参数配合使用。

-P前缀

使用此参数可从为事件指定的符号名称的开头删除字符。 比较不区分大小写。 编译器使用符号名称形成日志记录宏名称和方法名称。

日志记录宏的默认名称是 EventWriteSymbolName,其中 SymbolName 是为事件指定的符号名称。 例如,如果将事件的符号属性设置为 PrinterConnection,则宏名称将为 EventWritePrinterConnection。 若要从名称中删除打印机,请使用 -PPrinter,这会导致 EventWriteConnection。

可以将此参数与 -um-cs-css-km 参数配合使用。

-um

使用此参数让编译器生成用于记录清单中定义的事件的用户模式代码。

若要让编译器生成日志记录代码,必须指定 -um-cs-css-km 参数;这些参数是互斥的。

若要指定在何处放置编译器生成的 .h、.cs 和 .mof 文件,请使用 -h 参数。 如果未指定 -h 参数,这些文件将放置在当前文件夹中。

若要指定编译器生成的 .rc 文件和二进制文件(包含元数据资源)的位置,请使用 -r 参数。 如果未指定 -r 参数,则文件将放置在当前文件夹中。

编译器使用输入文件的基名称作为它生成的文件的基名称。 若要指定基名称,请使用 -z 参数。

特定于消息文本文件的参数

-a

使用此参数指定 文件名 输入文件包含系统默认 Windows ANSI 代码页(CP_ACP)中的内容。 这是默认值。 对 Unicode 使用 -u。 如果输入文件包含 BOM,则忽略此参数。

-A

荒废的。 使用此参数指定输出.bin文件中的消息应为 ANSI。

-b

使用此参数让编译器对.bin文件名使用 文件名的基名称 输入文件。 默认值为使用“MSG”。

-d

使用此参数可对头文件中的严重性和设施常量使用十进制值,而不是十六进制值。

-n

使用此参数指定消息在消息正文之后立即终止。 默认值是使用 CR/LF 终止消息正文。

-o

使用此参数让编译器使用 HRESULT 定义而不是状态代码生成 OLE2 头文件。 使用状态代码是默认值。

-u

使用此参数指定 文件名 输入文件包含 UTF-16LE 内容。 默认值为 ANSI 内容。 如果输入文件包含 BOM,则忽略此参数。

-U

使用此参数指定输出.bin文件中的消息应为 Unicode。 这是默认值。

-v

使用此参数生成详细输出。

-x路径

使用此参数可指定要编译器放置 .dbg C 包含文件的文件夹。 .dbg 文件将消息 ID 映射到其符号名称。

言论

-A-mof 参数已弃用,将来将被删除。

编译器接受作为清单(.man)文件或消息文本(.mc)文件的输入,并生成以下文件:

  • 文件名.h

    C/C++头文件,其中包含在应用程序中引用的事件描述符、提供程序 GUID 和符号名称。

  • 文件名TEMP.bin

    包含提供程序和事件元数据的二进制资源文件。 这是模板资源,由文件的基名称的 TEMP 后缀进行签名。

  • Msg00001.bin

    指定的每种语言的二进制资源文件(例如,如果清单包含 en-US 和 fr-FR中的消息字符串,编译器将生成Msg00001.bin和Msg00002.bin)。

  • 文件名.rc

    一个资源编译器脚本,其中包含将每个.bin文件作为资源包含的语句。

对于采用路径的参数,该路径可以是绝对路径、相对路径或 UNC 路径,并且可以包含环境变量。

MC 版本 1.12.7051 之前: 编译器不允许相对路径或环境变量。

例子

以下示例使用编译器默认值编译清单。

mc spooler.man

以下示例编译清单,并将标头和资源文件放在指定的文件夹中。

mc -h <pathgoeshere> -r <pathgoeshere> spooler.man

要求

要求 价值
支持的最低客户端 Windows 2000 Professional [仅限桌面应用]
支持的最低服务器 Windows 2000 Server [仅限桌面应用]