Compilador de mensagens (MC.exe)

Usado para compilar manifestos de instrumentação e arquivos de texto de mensagem. O compilador gera os arquivos de recurso de mensagem aos quais o aplicativo é vinculado.

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>]

Argumentos comuns a arquivos de texto de mensagem e arquivos de manifesto

-?

Exibe as informações de uso do Compilador de Mensagens.

-C

Use esse argumento para que o compilador defina o bit do cliente (bit 28) em todas as IDs de mensagem. Para obter informações sobre a bit do cliente, consulte winerror.h.

-cpencoding

Use esse argumento para especificar a codificação de caracteres usada para todos os arquivos de texto gerados. Os nomes válidos incluem "ansi" (padrão), "utf-8" e "utf-16". As codificações Unicode adicionarão uma marca de ordem de byte.

Extensão-e

Use esse argumento para especificar a extensão a ser usada para o arquivo de cabeçalho. Você pode especificar até uma extensão de três caracteres, não incluindo o período. O padrão é .h.

Caminho -h

Use esse argumento para especificar a pasta na qual você deseja que o compilador coloque o arquivo de cabeçalho gerado. O padrão é o diretório atual.

-mlength

Use esse argumento para que o compilador gere um aviso se a mensagem exceder os caracteres de comprimento .

Caminho -r

Use esse argumento para especificar a pasta na qual você deseja que o compilador coloque o script do compilador de recursos gerado (arquivo .rc) e os arquivos .bin gerados (recursos binários) que o script do compilador de recursos inclui. O padrão é o diretório atual.

-zname

Use esse argumento para substituir o nome base padrão que o compilador usa para os arquivos gerados. O padrão é usar o nome base do arquivo de entrada filename .

filename

O arquivo de manifesto de instrumentação ou o arquivo de texto da mensagem. O arquivo deve existir no diretório atual. Você pode especificar um arquivo de manifesto, um arquivo de texto de mensagem ou ambos. O nome do arquivo deve incluir a extensão. A convenção é usar uma extensão .man para arquivos de manifesto e uma extensão .mc para arquivos de texto de mensagem.

Argumentos específicos para arquivos de manifesto

-spath

Use esse argumento para criar uma linha de base de sua instrumentação. Especifique o caminho para a pasta que contém seus arquivos de manifesto de linha de base. Para versões subsequentes, você usaria o argumento -t para marcar o novo manifesto na linha de base para problemas de compatibilidade.

Antes do MC versão 1.12.7051: Não disponível

Caminho -t

Use esse argumento quando você criar uma nova versão do manifesto e quiser marcar-lo para compatibilidade do aplicativo em relação à linha de base que você criou usando o argumento -s. O caminho deve apontar para a pasta que contém o . Arquivos BIN que a operação de linha de base criou (consulte a opção -s ).

Antes do MC versão 1.12.7051: Não disponível

-wpath

O compilador ignora esse argumento e valida automaticamente o manifesto.

Antes do MC versão 1.12.7051: Use esse argumento para especificar a pasta que contém o arquivo de esquema Eventman.xsd, que o compilador usa para validar o manifesto. O SDK do Windows inclui o arquivo de esquema Eventman.xsd na pasta \Include. Se você não especificar esse argumento, o compilador não validará seu manifesto.

-Wpath

O compilador ignora esse argumento.

Antes do MC versão 1.12.7051: Use esse argumento para especificar a pasta que contém o arquivo Winmeta.xml. O arquivo Winmeta.xml contém os tipos de entrada e saída reconhecidos, bem como os canais, níveis e opcodes predefinidos. O SDK do Windows inclui o arquivo Winmeta.xml na pasta \Include.

Argumentos específicos para gerar código que seu provedor usaria para registrar eventos

Você pode usar os seguintes argumentos do compilador para gerar o código do modo kernel ou do modo de usuário que você pode usar para registrar eventos em log. Você também pode solicitar que o compilador gere código para dar suporte à gravação de eventos em computadores anteriores ao Windows Vista. Se o aplicativo for gravado em C#, o compilador poderá gerar uma classe C# que você pode usar para registrar eventos em log. Esses argumentos estão disponíveis a partir da versão 1.12.7051 do MC que acompanha a versão do Windows 7 do SDK do Windows.

-Co

Use esse argumento para que o serviço de registro em log chame sua função definida pelo usuário para cada evento que você registra (a função é chamada depois que o evento é registrado). Sua função definida pelo usuário deve ter a assinatura a seguir.

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

Você também deve incluir a diretiva a seguir em seu código.

#define MCGEN_CALLOUT pFnUserFunction

Você deve manter sua implementação o mais curta possível para evitar problemas de registro em log; o serviço não registrará mais seus eventos até que a função retorne.

Você pode usar esse argumento com o argumento -km ou -um .

Namespace -cs

Use esse argumento para que o compilador gere uma classe C# com base na classe EventProvider do .NET 3.5.

Namespace -css

Use esse argumento para que o compilador gere uma classe C# estática com base na classe EventProvider do .NET 3.5.

-km

Use esse argumento para que o compilador gere o código do modo kernel que você usaria para registrar os eventos definidos no manifesto.

-Mof

PRETERIDO. Use esse argumento para que o compilador gere o código que você pode usar para registrar eventos em computadores antes do Windows Vista. Essa opção também cria um arquivo MOF que contém as classes MOF para cada evento definido no manifesto. Para registrar as classes no arquivo MOF para que os consumidores possam decodificar os eventos, use o compilador MOF (Mofcomp.exe). Para obter detalhes sobre como usar o compilador MOF, consulte Managed Object Format.

Para usar essa opção, você deve seguir as seguintes restrições:

  • Cada definição de evento deve incluir os atributos task e opcode
  • Cada tarefa deve incluir o atributo eventGuid
  • Os dados de modelo que as referências de evento não podem conter:
    • Itens de dados que especificam os tipos de entrada win:Binary ou win:SYSTEMTIME
    • Estruturas
    • Matrizes de tamanho variável; no entanto, você pode especificar matrizes de comprimento fixo
    • Os tipos de dados de cadeia de caracteres não podem especificar o atributo length

Você deve usar esse argumento com o argumento -um, -cs, -css ou -km

Prefixo -p

Use esse argumento para substituir o prefixo padrão que o compilador usa para registrar nomes de macro e nomes de método. O prefixo padrão é "EventWrite". A cadeia de caracteres diferencia maiúsculas de minúsculas.

Você pode usar esse argumento com o argumento -um, -cs, -css ou -km .

Prefixo -P

Use esse argumento para remover caracteres do início do nome simbólico especificado para o evento. A comparação não diferencia maiúsculas de minúsculas. O compilador usa o nome simbólico para formar os nomes de macro de registro em log e os nomes de método.

O nome padrão de uma macro de log é EventWriteSymbolName, em que SymbolName é o nome simbólico especificado para o evento. Por exemplo, se você definir o atributo de símbolo do evento como PrinterConnection, o nome da macro será EventWritePrinterConnection. Para remover Printer do nome, use -PPrinter, que resulta em EventWriteConnection.

Você pode usar esse argumento com o argumento -um, -cs, -css ou -km .

-um

Use esse argumento para que o compilador gere o código do modo de usuário que você usaria para registrar os eventos definidos em seu manifesto.

Para que o compilador gere o código de log, você deve especificar o argumento -um, -cs, -css ou -km ; esses argumentos são mutuamente exclusivos.

Para especificar onde colocar os arquivos .h, .cs e .mof gerados pelo compilador, use o argumento -h . Se você não especificar o argumento -h , os arquivos serão colocados na pasta atual.

Para especificar onde colocar o arquivo .rc e os arquivos binários (que contêm os recursos de metadados) gerados pelo compilador, use o argumento -r . Se você não especificar o argumento -r , os arquivos serão colocados na pasta atual.

O compilador usa o nome base do arquivo de entrada como o nome base dos arquivos gerados. Para especificar um nome base, use o argumento -z .

Argumentos específicos para arquivos de texto de mensagem

-Um

Use esse argumento para especificar que o arquivo de entrada filename contém conteúdo na página de código ANSI do Windows padrão do sistema (CP_ACP). Esse é o padrão. Use -u para Unicode. Se o arquivo de entrada contiver um BOM, esse argumento será ignorado.

-Um

PRETERIDO. Use esse argumento para especificar que as mensagens no arquivo .bin de saída devem ser ANSI.

-B

Use esse argumento para que o compilador use o nome base do arquivo de entrada filename para os nomes de arquivo .bin. O padrão é usar "MSG".

-d

Use esse argumento para usar valores decimais para as constantes Severity e Facility no arquivo de cabeçalho em vez de valores hexadecimal.

-N

Use esse argumento para especificar que as mensagens terminem imediatamente após o corpo da mensagem. O padrão é encerrar o corpo da mensagem com um CR/LF.

-o

Use esse argumento para que o compilador gere um arquivo de cabeçalho OLE2 usando definições HRESULT em vez de status códigos. Usar códigos status é o padrão.

-U

Use esse argumento para especificar que o arquivo de entrada filename contém conteúdo UTF-16LE. O padrão é conteúdo ANSI. Se o arquivo de entrada contiver um BOM, esse argumento será ignorado.

-U

Use esse argumento para especificar que as mensagens no arquivo .bin de saída devem ser Unicode. Esse é o padrão.

-V

Use esse argumento para gerar uma saída detalhada.

Caminho -x

Use esse argumento para especificar a pasta na qual você deseja que o compilador coloque o arquivo de inclusão .dbg C. O arquivo .dbg mapeia as IDs de mensagem para seus nomes simbólicos.

Comentários

Os argumentos -A e -mof são preteridos e serão removidos no futuro.

O compilador aceita como entrada um arquivo de manifesto (.man) ou um arquivo de texto de mensagem (.mc) e gera os seguintes arquivos:

  • filename.h

    Um arquivo de cabeçalho C/C++ que contém os descritores de eventos, o GUID do provedor e os nomes de símbolo que você referencia em seu aplicativo.

  • Filename TEMP.bin

    Um arquivo de recurso binário que contém o provedor e os metadados de evento. Esse é o recurso de modelo, que é assinado pelo sufixo TEMP do nome base do arquivo.

  • Msg00001.bin

    Um arquivo de recurso binário para cada idioma especificado (por exemplo, se o manifesto contiver cadeias de caracteres de mensagem em en-US e fr-FR, o compilador gerará Msg00001.bin e Msg00002.bin).

  • filename.rc

    Um script do compilador de recursos que contém as instruções para incluir cada arquivo .bin como um recurso.

Para argumentos que tomam um caminho, o caminho pode ser um caminho absoluto, relativo ou UNC e pode conter variáveis de ambiente.

Antes do MC versão 1.12.7051: O compilador não permite caminhos relativos ou variáveis de ambiente.

O SDK do Windows inclui o compilador (mc.exe) na pasta \Bin.

Exemplos

O exemplo a seguir compila um manifesto usando os padrões do compilador.

mc spooler.man

O exemplo a seguir compila o manifesto e coloca o cabeçalho e os arquivos de recurso nas pastas especificadas.

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

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]