Partilhar via


Compilador de mensagens (MC.exe)

O 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 seu aplicativo se vincula.

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

Observação

O compilador de mensagens é fornecido com o SDK do Windows e pode ser encontrado na pasta \Bin.

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 o bit do cliente, consulte winerror.h.

-cpcodificação

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 bytes.

-eextensão

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, sem incluir o ponto. O padrão é .h.

-hcaminho

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.

-mcomprimento

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

-rcaminho

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

-znome

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

nome do arquivo

O arquivo de manifesto de instrumentação ou arquivo de texto de 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

-scaminho

Use esse argumento para criar uma linha de base da sua instrumentação. Especifique o caminho para a pasta que contém os arquivos de manifesto da linha de base. Para versões subsequentes, você usaria o argumento -t para verificar o novo manifesto em relação à linha de base quanto a problemas de compatibilidade.

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

-tcaminho

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

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

-wcaminho

O compilador ignora esse argumento e valida automaticamente o manifesto.

Antes da versão MC 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 seu 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.

-Wcaminho

O compilador ignora esse argumento.

Antes da versão MC 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 código de modo kernel ou modo de usuário que você pode usar para registrar eventos. 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 seu aplicativo é escrito C#, o compilador pode gerar uma classe C# que você pode usar para registrar eventos. Esses argumentos estão disponíveis a partir da versão MC 1.12.7051 que acompanha a versão do Windows 7 do SDK do Windows.

-co

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

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 seguinte diretiva em seu código.

#define MCGEN_CALLOUT pFnUserFunction

Você deve manter sua implementação o mais curta possível para evitar problemas de registro; 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.

-csnamespace

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

-cssnamespace

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

km

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

-mof

PRETERIDO. Use esse argumento para que o compilador gere código que você pode usar para registrar eventos em computadores anteriores ao 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 aderir às seguintes restrições:

  • Cada definição de evento deve incluir os atributos task e opcode
  • Cada tarefa deve incluir o atributo eventGuid
  • Os dados do modelo que as referências do 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, -cssou -km

-pprefixo

Use esse argumento para substituir o prefixo padrão que o compilador usa para os nomes de macro de log 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, -cssou -km.

-Pprefixo

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 log e nomes de método.

O nome padrão para uma macro de log é EventWriteSymbolName, onde SymbolName é o nome simbólico que você especificou para o evento. Por exemplo, se você definir o atributo symbol 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, -cssou -km.

-um

Use esse argumento para que o compilador gere o código de 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, -cssou -km; estes argumentos excluem-se mutuamente.

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 que ele gera. Para especificar um nome base, use o argumento -z.

Argumentos específicos para arquivos de texto de mensagem

-uma

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

-A

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

-b

Use esse argumento para que o compilador use o nome base do nome de arquivo arquivo de entrada 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 hexadecimais.

-n

Use esse argumento para especificar que as mensagens sejam encerradas 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 de HRESULT em vez de códigos de status. Usar códigos de status é o padrão.

-u

Use esse argumento para especificar que o nome do arquivo de entrada contém conteúdo UTF-16LE. O padrão é conteúdo ANSI. Se o arquivo de entrada contiver uma lista técnica, esse argumento será ignorado.

-U

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

-V

Use esse argumento para gerar uma saída detalhada.

-xcaminho

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

Comentários

Os argumentos -A e -mof foram 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:

  • nome do arquivo.h

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

  • nome do arquivoTEMP.bin

    Um arquivo de recurso binário que contém o provedor e metadados de evento. Este é o recurso de modelo, que é significado 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).

  • nome do arquivo.rc

    Um script de 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 da versão MC 1.12.7051: O compilador não permite caminhos relativos ou variáveis de ambiente.

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 os arquivos de cabeçalho e recurso nas pastas especificadas.

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

Requerimentos

Exigência Valor
Cliente mínimo suportado Windows 2000 Professional [apenas aplicações de ambiente de trabalho]
Servidor mínimo suportado Windows 2000 Server [apenas aplicações de ambiente de trabalho]