消息编译器 (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>]

消息文本文件和清单文件通用的参数

-?

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

-C

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

-cp编码

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

-e扩展

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

-h路径

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

-m长度

使用此参数让编译器在任何消息超过 长度 字符时生成警告。

-rpath

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

-zname

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

filename

检测清单文件或消息文本文件。 文件必须存在于当前目录中。 可以指定清单文件、消息文本文件或同时指定这两者。 文件名必须包含 扩展名。 约定是对清单文件使用 .man 扩展名,对消息文本文件使用 .mc 扩展名。

特定于清单文件的参数

-s路径

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

MC 版本 1.12.7051 之前: 不可用

-t路径

创建清单的新版本并想要检查该清单,以便应用程序与使用 -s 参数创建的基线兼容时,请使用此参数。 路径必须指向包含 的文件夹。基线操作创建的 BIN 文件 (看到 -s 开关) 。

MC 版本 1.12.7051 之前: 不可用

-wpath

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

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# 类。 这些参数从 Windows 7 版本 Windows SDK 附带的 MC 版本 1.12.7051 开始可用。

-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# 类。

-公里

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

-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 是为事件指定的符号名称。 例如,如果将事件的 symbol 属性设置为 PrinterConnection,则宏名称将为 EventWritePrinterConnection。 若要从名称中删除 Printer,请使用 -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

使用此参数即可在头文件的 Severity 和 Facility 常量中使用十进制值,而不是十六进制值。

-n

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

-o

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

-美国

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

-美国

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

-V

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

-x路径

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

备注

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

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

  • filename.h

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

  • 文件名TEMP.bin

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

  • Msg00001.bin

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

  • filename.rc

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

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

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

Windows SDK 包含 \Bin 文件夹中的编译器 (mc.exe) 。

示例

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

mc spooler.man

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

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

要求

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