Freigeben über


Message Compiler (MC.exe)

Der Nachrichtencompiler (mc.exe) wird zum Kompilieren von Instrumentierungsmanifesten und Nachrichtentextdateien verwendet. Der Compiler generiert die Nachrichtenressourcendateien, mit denen Ihre Anwendung verknüpft ist.

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

Anmerkung

Der Nachrichtencompiler wird mit dem Windows SDK ausgeliefert und befindet sich im Ordner "\Bin".

Argumente, die sowohl nachrichtentextdateien als auch Manifestdateien gemeinsam sind

-?

Zeigt die Verwendungsinformationen für den Nachrichtencompiler an.

-c

Verwenden Sie dieses Argument, damit der Compiler das Kundenbit (Bit 28) in allen Nachrichten-IDs festgelegt hat. Informationen zum Kundenbit finden Sie unter "winerror.h".

-cpCodierung

Verwenden Sie dieses Argument, um die Zeichencodierung anzugeben, die für alle generierten Textdateien verwendet wird. Gültige Namen sind "ansi" (Standard), "utf-8" und "utf-16". Die Unicode-Codierungen fügen ein Bytereihenfolgezeichen hinzu.

-eErweiterung

Verwenden Sie dieses Argument, um die Erweiterung anzugeben, die für die Headerdatei verwendet werden soll. Sie können bis zu drei Zeichenerweiterung angeben, nicht einschließlich des Punkts. Der Standardwert ist H.

-hPfad

Verwenden Sie dieses Argument, um den Ordner anzugeben, in dem der Compiler die generierte Headerdatei platzieren soll. Der Standardwert ist das aktuelle Verzeichnis.

-mLänge

Verwenden Sie dieses Argument, damit der Compiler eine Warnung generiert, wenn die Nachricht Länge Zeichen überschreitet.

-rPfad

Verwenden Sie dieses Argument, um den Ordner anzugeben, in den der Compiler das generierte Ressourcencompilerskript (RC-Datei) und die generierten .bin Dateien (binäre Ressourcen) platzieren soll, die das Ressourcencompilerskript enthält. Der Standardwert ist das aktuelle Verzeichnis.

-zName

Verwenden Sie dieses Argument, um den Standardbasisnamen außer Kraft zu setzen, den der Compiler für die von ihr generierten Dateien verwendet. Standardmäßig wird der Basisname des Dateinamens Eingabedatei verwendet.

Dateinamen

Die Instrumentierungsmanifestdatei oder Nachrichtentextdatei. Die Datei muss im aktuellen Verzeichnis vorhanden sein. Sie können eine Manifestdatei, eine Nachrichtentextdatei oder beides angeben. Der Dateiname muss die Erweiterung enthalten. Die Konvention besteht darin, eine MAN-Erweiterung für Manifestdateien und eine MC-Erweiterung für Nachrichtentextdateien zu verwenden.

Für Manifestdateien spezifische Argumente

-sPfad

Verwenden Sie dieses Argument, um eine Basislinie Ihrer Instrumentierung zu erstellen. Geben Sie den Pfad zu dem Ordner an, der Ihre Basismanifestdateien enthält. Bei nachfolgenden Versionen würden Sie dann das Argument -t verwenden, um das neue Manifest anhand der Basis für Kompatibilitätsprobleme zu überprüfen.

Vor MC Version 1.12.7051: Nicht verfügbar

-tPfad

Verwenden Sie dieses Argument, wenn Sie eine neue Version Ihres Manifests erstellen und auf Anwendungskompatibilität anhand des Basisplans überprüfen möchten, den Sie mit dem Argument -s erstellt haben. Der Pfad muss auf den Ordner verweisen, der die Datei enthält. BIN-Dateien, die der geplante Vorgang erstellt hat (siehe -s Switch).

Vor MC Version 1.12.7051: Nicht verfügbar

-wPfad

Der Compiler ignoriert dieses Argument und überprüft das Manifest automatisch.

Vor MC Version 1.12.7051: Verwenden Sie dieses Argument, um den Ordner anzugeben, der die Eventman.xsd-Schemadatei enthält, die der Compiler zum Überprüfen Des Manifests verwendet. Das Windows SDK enthält die Schemadatei "Eventman.xsd" im Ordner "\Include". Wenn Sie dieses Argument nicht angeben, überprüft der Compiler das Manifest nicht.

-WPfad

Der Compiler ignoriert dieses Argument.

Vor MC Version 1.12.7051: Verwenden Sie dieses Argument, um den Ordner anzugeben, der die Winmeta.xml Datei enthält. Die Winmeta.xml Datei enthält die erkannten Eingabe- und Ausgabetypen sowie die vordefinierten Kanäle, Ebenen und Opcodes. Das Windows SDK enthält die Winmeta.xml Datei im Ordner \Include.

Spezifische Argumente zum Generieren von Code, den Ihr Anbieter zum Protokollieren von Ereignissen verwenden würde

Sie können die folgenden Compilerargumente verwenden, um Kernelmodus- oder Benutzermoduscode zu generieren, den Sie zum Protokollieren von Ereignissen verwenden können. Sie können auch anfordern, dass der Compiler Code generiert, um das Schreiben von Ereignissen auf Computern vor Windows Vista zu unterstützen. Wenn Ihre Anwendung C# geschrieben hat, kann der Compiler eine C#-Klasse generieren, die Sie zum Protokollieren von Ereignissen verwenden können. Diese Argumente sind ab MC Version 1.12.7051 verfügbar, die im Lieferumfang der Windows 7-Version des Window SDK enthalten sind.

-co

Verwenden Sie dieses Argument, damit der Protokollierungsdienst ihre benutzerdefinierte Funktion für jedes protokollierte Ereignis aufruft (die Funktion wird aufgerufen, nachdem das Ereignis protokolliert wurde). Ihre benutzerdefinierte Funktion muss über die folgende Signatur verfügen.

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

Sie müssen auch die folgende Direktive in Ihren Code einschließen.

#define MCGEN_CALLOUT pFnUserFunction

Sie sollten Ihre Implementierung so kurz wie möglich halten, um Protokollierungsprobleme zu verhindern. der Dienst protokolliert nicht mehr von Ihren Ereignissen, bis die Funktion zurückgegeben wird.

Sie können dieses Argument mit dem Argument -km oder -um verwenden.

-csNamespace-

Verwenden Sie dieses Argument, damit der Compiler eine C#-Klasse basierend auf der .NET 3.5-EventProvider-klasse generiert.

-css-Namespace-

Verwenden Sie dieses Argument, damit der Compiler eine statische C#-Klasse basierend auf der .NET 3.5-EventProvider-klasse generiert.

-km-

Verwenden Sie dieses Argument, damit der Compiler den Kernelmoduscode generiert, den Sie verwenden würden, um die in Ihrem Manifest definierten Ereignisse zu protokollieren.

-mof-

VERALTET. Verwenden Sie dieses Argument, damit der Compiler Code generiert, den Sie zum Protokollieren von Ereignissen auf Computern vor Windows Vista verwenden können. Mit dieser Option wird auch eine MOF-Datei erstellt, die die MOF-Klassen für jedes im Manifest definierte Ereignis enthält. Um die Klassen in der MOF-Datei zu registrieren, damit Verbraucher die Ereignisse decodieren können, verwenden Sie den MOF-Compiler (Mofcomp.exe). Ausführliche Informationen zur Verwendung des MOF-Compilers finden Sie unter Managed Object Format.

Um diesen Schalter zu verwenden, müssen Sie die folgenden Einschränkungen einhalten:

  • Jede Ereignisdefinition muss die Aufgaben- und Opcodeattribute enthalten.
  • Jede Aufgabe muss das eventGuid-Attribut enthalten.
  • Die Vorlagendaten, auf die das Ereignis verweist, dürfen folgendes nicht enthalten:
    • Datenelemente, die die Eingabetypen "win:Binary" oder "win:SYSTEMTIME" angeben
    • Strukturen
    • Arrays mit variabler Größe; Sie können jedoch Arrays mit fester Länge angeben.
    • Zeichenfolgendatentypen können das Längenattribute nicht angeben.

Sie müssen dieses Argument mit dem Argument -um, -cs, -css-oder -km Argument verwenden.

-pPräfix

Verwenden Sie dieses Argument, um das Standardpräfix außer Kraft zu setzen, das der Compiler für die Protokollierungsmakronamen und Methodennamen verwendet. Das Standardpräfix lautet "EventWrite". Bei der Zeichenfolge wird die Groß-/Kleinschreibung beachtet.

Sie können dieses Argument mit dem Argument -um, -cs, -css-oder -km argument verwenden.

-PPräfix

Verwenden Sie dieses Argument, um Zeichen vom Anfang des symbolischen Namens zu entfernen, den Sie für das Ereignis angegeben haben. Bei dem Vergleich wird die Groß-/Kleinschreibung nicht beachtet. Der Compiler verwendet den symbolischen Namen, um die Protokollierungsmakronamen und Methodennamen zu bilden.

Der Standardname für ein Protokollierungsmakro ist EventWriteSymbolName, wobei SymbolName- der symbolische Name ist, den Sie für das Ereignis angegeben haben. Wenn Sie beispielsweise das Symbol-Attribut des Ereignisses auf PrinterConnection festlegen, lautet der Makroname "EventWritePrinterConnection". Zum Entfernen des Druckers aus dem Namen verwenden Sie -PPrinter, was zu EventWriteConnection führt.

Sie können dieses Argument mit dem Argument -um, -cs, -css-oder -km argument verwenden.

-um

Verwenden Sie dieses Argument, damit der Compiler den Benutzermoduscode generiert, den Sie verwenden würden, um die in Ihrem Manifest definierten Ereignisse zu protokollieren.

Damit der Compiler Protokollierungscode generiert, müssen Sie das Argument -um, -cs, -css-oder -km angeben; diese Argumente schließen sich gegenseitig aus.

Um anzugeben, wo die vom Compiler generierten H-, .cs- und MOF-Dateien platziert werden sollen, verwenden Sie das Argument -h. Wenn Sie das Argument -h nicht angeben, werden die Dateien im aktuellen Ordner platziert.

Verwenden Sie das Argument -r, um anzugeben, wo die RC-Datei und Binärdateien platziert werden sollen (die die Metadatenressourcen enthalten). Wenn Sie das Argument -r nicht angeben, werden die Dateien im aktuellen Ordner platziert.

Der Compiler verwendet den Basisnamen der Eingabedatei als Basisnamen der von ihr generierten Dateien. Um einen Basisnamen anzugeben, verwenden Sie das Argument -z.

Für Nachrichtentextdateien spezifische Argumente

-a

Verwenden Sie dieses Argument, um anzugeben, dass der Dateinamen Eingabedatei Inhalt auf der Systemstandard-Windows ANSI-Codeseite (CP_ACP) enthält. Dies ist die Standardeinstellung. Verwenden Sie -u- für Unicode. Wenn die Eingabedatei eine BOM enthält, wird dieses Argument ignoriert.

-A-

VERALTET. Verwenden Sie dieses Argument, um anzugeben, dass die Nachrichten in der Ausgabedatei .bin Datei ANSI sein sollen.

-b

Verwenden Sie dieses Argument, damit der Compiler den Basisnamen des Dateinamens Eingabedatei für die .bin Dateinamen verwendet. Der Standardwert ist die Verwendung von "MSG".

-d

Verwenden Sie dieses Argument, um Dezimalwerte für die Schweregrad- und Facility-Konstanten in der Headerdatei anstelle von Hexadezimalwerten zu verwenden.

-n-

Verwenden Sie dieses Argument, um anzugeben, dass Nachrichten unmittelbar nach dem Nachrichtentext beendet werden. Standardmäßig wird der Nachrichtentext mit einem CR/LF beendet.

-o

Verwenden Sie dieses Argument, damit der Compiler eine OLE2-Headerdatei mit HRESULT- Definitionen anstelle von Statuscodes generiert. Die Verwendung von Statuscodes ist die Standardeinstellung.

-u

Verwenden Sie dieses Argument, um anzugeben, dass der Dateinamen Eingabedatei UTF-16LE-Inhalt enthält. Der Standardwert ist ANSI-Inhalt. Wenn die Eingabedatei eine BOM enthält, wird dieses Argument ignoriert.

-U-

Verwenden Sie dieses Argument, um anzugeben, dass die Nachrichten in der Ausgabedatei .bin Datei Unicode sein sollen. Dies ist die Standardeinstellung.

-v

Verwenden Sie dieses Argument, um ausführliche Ausgabe zu generieren.

-xPfad

Verwenden Sie dieses Argument, um den Ordner anzugeben, in dem der Compiler die .dbg C-Includedatei platzieren soll. Die DBG-Datei ordnet Nachrichten-IDs ihren symbolischen Namen zu.

Bemerkungen

Die Argumente -A und -mof- sind veraltet und werden in Zukunft entfernt.

Der Compiler akzeptiert als Eingabe einer Manifestdatei (.man) oder einer Nachrichtentextdatei (.mc) und generiert die folgenden Dateien:

  • DateinamenH

    Eine C/C++-Headerdatei, die die Ereignisdeskriptoren, die Anbieter-GUID und Symbolnamen enthält, auf die Sie in Ihrer Anwendung verweisen.

  • DateinamenTEMP.bin

    Eine binäre Ressourcendatei, die die Anbieter- und Ereignismetadaten enthält. Dies ist die Vorlagenressource, die durch das TEMP-Suffix des Basisnamens der Datei gekennzeichnet ist.

  • Msg00001.bin

    Eine binäre Ressourcendatei für jede von Ihnen angegebene Sprache (z. B. wenn Ihr Manifest Nachrichtenzeichenfolgen in en-US und fr-FRenthält, generiert der Compiler Msg00001.bin und Msg00002.bin).

  • Dateinamen.rc

    Ein Ressourcencompilerskript, das die Anweisungen enthält, um jede .bin Datei als Ressource einzuschließen.

Bei Argumenten, die einen Pfad annehmen, kann der Pfad ein absoluter, relativer oder UNC-Pfad sein, und er kann Umgebungsvariablen enthalten.

Vor MC Version 1.12.7051: Der Compiler lässt keine relativen Pfade oder Umgebungsvariablen zu.

Beispiele

Im folgenden Beispiel wird ein Manifest mithilfe der Compilerstandardwerte kompiliert.

mc spooler.man

Im folgenden Beispiel wird das Manifest kompiliert und die Header- und Ressourcendateien in den angegebenen Ordnern platziert.

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

Anforderungen

Anforderung Wert
Mindestens unterstützter Client Windows 2000 Professional [nur Desktop-Apps]
Mindestens unterstützter Server Windows 2000 Server [nur Desktop-Apps]