訊息編譯器 (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

使用此引數讓編譯器在所有訊息識別碼中設定客戶位 (位 28) 。 如需客戶位的資訊,請參閱 winerror.h。

-cp編碼

使用此引數來指定用於所有所產生文字檔的字元編碼。 有效名稱包括 「ansi」 (預設) 、「utf-8」 和 「utf-16」。 Unicode 編碼會新增位元組順序標記。

-e擴充功能

使用此引數來指定要用於標頭檔的副檔名。 您可以指定最多三個字元的副檔名,不包括句點。 預設值為 .h。

-h路徑

使用此引數可指定您要編譯器放置所產生標頭檔的資料夾。 預設值是目前的目錄。

-m長度

如果有任何訊息超過 長度 字元,請使用這個引數讓編譯器產生警告。

-r路徑

使用此引數可指定您要編譯器將產生的資源編譯器腳本放在其中的資料夾 (.rc 檔案) ,以及產生的 .bin 檔案 (二進位資源,) 資源編譯器腳本所包含的二進位資源。 預設值是目前的目錄。

-z名稱

使用此引數覆寫編譯器針對其產生的檔案所使用的預設基底名稱。 預設值是使用 檔案名 輸入檔的基底名稱。

檔案名

檢測資訊清單檔案或訊息文字檔。 檔案必須存在於目前的目錄中。 您可以指定資訊清單檔、訊息文字檔或兩者。 檔案名必須包含副檔名。 慣例是針對資訊清單檔使用 .man 副檔名,以及訊息文字檔的 .mc 副檔名。

資訊清單檔案特有的引數

-s路徑

使用此引數來建立檢測的基準。 指定包含基準資訊清單檔案的資料夾路徑。 針對後續的版本,您接著會使用 -t 引數,根據基準檢查新的資訊清單是否有相容性問題。

MC 1.12.7051 版之前: 無法使用

-t路徑

當您建立新版本的資訊清單,並想要針對您使用 -s 引數建立的基準檢查它是否有應用程式相容性時,請使用這個引數。 路徑必須指向包含 的資料夾。基準作業建立的 BIN 檔案 (會看到 -s 參數) 。

MC 1.12.7051 版之前: 無法使用

-w路徑

編譯器會忽略此引數,並自動驗證資訊清單。

MC 1.12.7051 版之前: 使用此引數來指定包含 Eventman.xsd 架構檔案的資料夾,編譯器會使用此檔案來驗證資訊清單。 Windows SDK 包含 \Include 資料夾中的 Eventman.xsd 架構檔案。 如果您未指定此引數,編譯器不會驗證您的資訊清單。

-W路徑

編譯器會忽略這個引數。

MC 1.12.7051 版之前: 使用此引數來指定包含Winmeta.xml檔案的資料夾。 Winmeta.xml檔案包含已辨識的輸入和輸出類型,以及預先定義的通道、層級和 opcode。 Windows SDK 包含 \Include 資料夾中的Winmeta.xml檔案。

產生提供者用來記錄事件之程式碼的特定引數

您可以使用下列編譯器引數來產生可用來記錄事件的核心模式或使用者模式程式碼。 您也可以要求編譯器產生程式碼,以支援在 Windows Vista 之前在電腦上撰寫事件。 如果您的應用程式是撰寫 C#,編譯器可以產生可用來記錄事件的 C# 類別。 這些引數從 MC 1.12.7051 版開始提供,隨附于 Windows 7 版本的 Window 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命名空間

使用此引數讓編譯器根據 .NET 3.5 EventProvider 類別產生 C# 類別。

-css命名空間

使用此引數讓編譯器根據 .NET 3.5 EventProvider 類別產生靜態 C# 類別。

-公里

使用此引數讓編譯器產生核心模式程式碼,以便用來記錄資訊清單中定義的事件。

-Mof

已淘汰。 使用這個引數讓編譯器產生程式碼,您可以在 Windows Vista 之前用來記錄電腦上的事件。 此選項也會建立 MOF 檔案,其中包含資訊清單中所定義之每個事件的 MOF 類別。 若要在 MOF 檔案中註冊類別,以便取用者可以解碼事件,請使用 MOF 編譯器 (Mofcomp.exe) 。 如需使用 MOF 編譯器的詳細資訊,請參閱 Managed 物件格式

若要使用此參數,您必須遵守下列限制:

  • 每個事件定義都必須包含工作和 opcode 屬性
  • 每個工作都必須包含 eventGuid 屬性
  • 事件參考的範本資料不能包含:
    • 指定 win:Binary 或 win:SYSTEMTIME 輸入類型的資料項目
    • 結構
    • 可變大小的陣列;不過,您可以指定固定長度陣列
    • 字串資料類型無法指定 length 屬性

您必須將此引數與 -um-cs-css-km 引數搭配使用

-p前置詞

使用此引數覆寫編譯器用於記錄宏名稱和方法名稱的預設前置詞。 預設前置詞為 「EventWrite」。 此字串區分大小寫。

您可以使用這個引數搭配 -um-cs-css-km 引數。

-P前置詞

使用此引數可從您為事件指定的符號名稱開頭移除字元。 此比較不區分大小寫。 編譯器會使用符號名稱來形成記錄宏名稱和方法名稱。

記錄宏的預設名稱是 EventWriteSymbolName,其中 SymbolName 是您為事件指定的符號名稱。 例如,如果您將事件的符號屬性設定為 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 include 檔案的資料夾。 .dbg 檔案會將訊息識別碼對應至其符號名稱。

備註

-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 [僅限桌面應用程式]