Поделиться через


Компилятор сообщений (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>]

Заметка

Компилятор сообщений поставляется с пакетом SDK для Windows и находится в папке \Bin.

Аргументы, общие для текстовых файлов сообщений и файлов манифеста

-?

Отображает сведения об использовании компилятора сообщений.

-c

Используйте этот аргумент, чтобы компилятор задал бит клиента (бит 28) во всех идентификаторах сообщений. Сведения о бите клиента см. в winerror.h.

-cpкодировки

Используйте этот аргумент, чтобы указать кодировку символов, используемую для всех созданных текстовых файлов. Допустимые имена включают ansi (по умолчанию), utf-8 и utf-16. Кодировки Юникода добавят метку порядка байтов.

расширение -e

Используйте этот аргумент, чтобы указать расширение, используемое для файла заголовка. Можно указать до трех символов расширения, не включая период. Значение по умолчанию — .h.

-hпути

Используйте этот аргумент, чтобы указать папку, в которую нужно поместить созданный файл заголовка компилятора. По умолчанию используется текущий каталог.

-m длина

Используйте этот аргумент, чтобы компилятор создает предупреждение, если любое сообщение превышает длину символов.

-rпути

Используйте этот аргумент, чтобы указать папку, в которую требуется, чтобы компилятор помещал созданный скрипт компилятора ресурсов (RC-файл) и созданные .bin файлы (двоичные ресурсы), в которые включается скрипт компилятора ресурсов. По умолчанию используется текущий каталог.

-zимя

Используйте этот аргумент, чтобы переопределить базовое имя по умолчанию, которое компилятор использует для создаваемых файлов. По умолчанию используется базовое имя имени файла входного файла.

имя файла

Файл манифеста инструментирования или текстовый файл сообщения. Файл должен существовать в текущем каталоге. Можно указать файл манифеста, текстовый файл сообщения или оба. Имя файла должно содержать расширение. Соглашение заключается в использовании расширения .man для файлов манифеста и расширения MC для текстовых файлов сообщений.

Аргументы, относящиеся к файлам манифеста

пути-s

Используйте этот аргумент для создания базовых показателей инструментирования. Укажите путь к папке, содержащей базовые файлы манифеста. Для последующих выпусков вы будете использовать аргумент -t для проверки нового манифеста в базовом плане проблем совместимости.

До MC версии 1.12.7051: Недоступно

-tпути

Используйте этот аргумент при создании новой версии манифеста и хотите проверить совместимость приложений с базовыми показателями, созданными с помощью аргумента -s . Путь должен указывать на папку, содержащую папку. ДВОИЧНЫе файлы, созданные базовой операцией (см. параметр -s ).

До MC версии 1.12.7051: Недоступно

-wпути

Компилятор игнорирует этот аргумент и автоматически проверяет манифест.

до MC версии 1.12.7051: Используйте этот аргумент, чтобы указать папку, содержащую файл схемы Eventman.xsd, который компилятор использует для проверки манифеста. Пакет SDK для Windows включает файл схемы Eventman.xsd в папке \Include. Если этот аргумент не указан, компилятор не проверяет манифест.

-Wпути

Компилятор игнорирует этот аргумент.

До MC версии 1.12.7051: Используйте этот аргумент, чтобы указать папку, содержащую файл Winmeta.xml. Файл Winmeta.xml содержит распознанные типы входных и выходных данных, а также предопределенные каналы, уровни и коды опкодов. Пакет SDK для Windows содержит файл Winmeta.xml в папке \Include.

Аргументы, относящиеся к созданию кода, используемого поставщиком для регистрации событий

Приведенные ниже аргументы компилятора можно использовать для создания кода в режиме ядра или пользовательском режиме, который можно использовать для журналов событий. Вы также можете запросить, чтобы компилятор создавал код для поддержки записи событий на компьютерах до Windows Vista. Если приложение написано на C#, компилятор может создать класс C#, который можно использовать для журналов событий. Эти аргументы доступны начиная с MC версии 1.12.7051, которая поставляется с версией Windows 7 пакета 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пространства имен

Используйте этот аргумент для создания компилятором класса C# на основе класса .NET 3.5 EventProvider.

-cssпространства имен

Используйте этот аргумент, чтобы компилятор создавал статический класс C# на основе класса .NET 3.5 EventProvider.

-km

Используйте этот аргумент для создания компилятором кода в режиме ядра, который будет использоваться для регистрации событий, определенных в манифесте.

-mof

УСТАРЕВШИЕ. Используйте этот аргумент для создания компилятором кода, который можно использовать для регистрации событий на компьютерах до Windows Vista. Этот параметр также создает MOF-файл, содержащий классы MOF для каждого события, определенного в манифесте. Чтобы зарегистрировать классы в MOF-файле, чтобы потребители могли декодировать события, используйте компилятор MOF (Mofcomp.exe). Дополнительные сведения об использовании компилятора MOF см. в формате управляемых объектов.

Чтобы использовать этот параметр, необходимо придерживаться следующих ограничений:

  • Каждое определение события должно включать атрибуты задачи и опкода
  • Каждая задача должна включать атрибут eventGuid
  • Данные шаблона, которые не могут содержать ссылки на события:
    • Элементы данных, указывающие типы входных данных win:Binary или win:SYSTEMTIME
    • Структуры
    • Массивы размера переменной; однако можно указать массивы фиксированной длины
    • Строковые типы данных не могут указывать атрибут длины

Этот аргумент необходимо использовать с аргументом -um, -cs, -cssили аргументом -km -km

-pпрефикс

Используйте этот аргумент для переопределения префикса по умолчанию, используемого компилятором для имен макросов ведения журнала и имен методов. Префикс по умолчанию — EventWrite. Строка учитывает регистр.

Этот аргумент можно использовать с аргументом -um, -cs, -cssили -km.

-Pпрефикс

Используйте этот аргумент для удаления символов с начала символьного имени, указанного для события. Сравнение не учитывает регистр. Компилятор использует символьное имя для формирования имен макросов журнала и имен методов.

Имя по умолчанию для макроса ведения журнала — EventWriteSymbolName, где SymbolName — это символическое имя, указанное для события. Например, если задать атрибут символа события в PrinterConnection, то имя макроса будет EventWritePrinterConnection. Чтобы удалить принтер из имени, используйте -P-принтера, что приводит к событию EventWriteConnection.

Этот аргумент можно использовать с аргументом -um, -cs, -cssили -km.

-um

Используйте этот аргумент для создания компилятором кода пользовательского режима, который будет использоваться для регистрации событий, определенных в манифесте.

Чтобы компилятор создавал код ведения журнала, необходимо указать аргумент -um, -cs, -cssили аргумент -km -km; эти аргументы являются взаимоисключающими.

Чтобы указать место размещения файлов H, .cs и MOF, создаваемых компилятором, используйте аргумент -h. Если аргумент -h не указан, файлы помещаются в текущую папку.

Чтобы указать место размещения RC-файла и двоичных файлов (содержащих ресурсы метаданных), создаваемых компилятором, используйте аргумент -r. Если аргумент -r не указан, файлы помещаются в текущую папку.

Компилятор использует базовое имя входного файла в качестве базового имени создаваемых файлов. Чтобы указать базовое имя, используйте аргумент -z.

Аргументы, относящиеся к текстовым файлам сообщения

-a

Используйте этот аргумент, чтобы указать, что имя файла входной файл содержит содержимое на кодовой странице Windows ANSI по умолчанию (CP_ACP). Это значение по умолчанию. Используйте -u -u для Юникода. Если входной файл содержит BOM, этот аргумент будет игнорироваться.

-A

УСТАРЕВШИЕ. Используйте этот аргумент, чтобы указать, что сообщения в выходном .bin файле должны быть ANSI.

-b

Используйте этот аргумент, чтобы компилятор использовал базовое имя имени файла входного файла для имен файлов .bin. По умолчанию используется msG.

-d

Используйте этот аргумент для использования десятичных значений для констант серьезности и объекта в файле заголовка вместо шестнадцатеричных значений.

-n

Используйте этот аргумент, чтобы указать, что сообщения завершаются сразу после текста сообщения. По умолчанию текст сообщения завершается с помощью CR/LF.

-o

Используйте этот аргумент, чтобы компилятор создает файл заголовка OLE2 с помощью определений HRESULT вместо кодов состояния. Использование кодов состояния — это значение по умолчанию.

-u

Используйте этот аргумент, чтобы указать, что имя файла входной файл содержит содержимое UTF-16LE. По умолчанию используется содержимое ANSI. Если входной файл содержит BOM, этот аргумент будет игнорироваться.

-U

Используйте этот аргумент, чтобы указать, что сообщения в выходном .bin файле должны быть Юникодом. Это значение по умолчанию.

-v

Используйте этот аргумент для создания подробных выходных данных.

путь -x

Используйте этот аргумент, чтобы указать папку, в которую требуется, чтобы компилятор поместил dbg C-файл. Идентификаторы сообщений dbg сопоставляются с символьными именами.

Замечания

Аргументы -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 Профессиональный [только классические приложения]
Минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]