如何用MC.exe编译清单文件?

时间:2014-11-18 17:23:31

标签: c# winapi event-log

我想在我的c#应用程序中使用Windows事件日志,所以我正在尝试创建一个事件提供程序。我已经编写了xml清单文件,但我不知道如何编译它来生成资源定义文件和C#代码文件。我知道我必须使用MessageCompiler(MC.exe)并且我已经安装了Windows SDK。有人可以给我关于如何进行的说明吗?

2 个答案:

答案 0 :(得分:2)

以下是mc.exe的msdn链接 我进行了搜索,发现这个document解释了使用mc.exe进行事件记录 希望有所帮助。

答案 1 :(得分:1)

(2021 年 2 月你好!)

  • Microsoft 最近更改了 mc.exe 的工作方式。

  • 此外,ecmangen.exe(“Manifest Generator”)GUI 程序记录在“Programmers Guide to Eventing”*.docx 文件(日期为 2010 年 12 月 17 日)is no-longer included in the Windows 10 SDK 无需更换

    • Microsoft 的官方建议是下载最新版本的 Windows 10 SDK,其中包括 ecmangen.exe... 令人讨厌的是 MSFT 的回复没有指定确切地应该使用哪个 SDK,参考它只是(非常含糊不清)名称“Windows 10 Creators Edition”。
      • (他们称此为“创作者版”,这让我很恼火,因为它听起来像家庭版和专业版这样的独立 SKU)
      • 原来他们指的是 Windows 10 SDK 10.0.15063.468,您可以从 the SDK archive page 下载。
      • Windows 10 SDK 中未包含“秋季创意者更新”(版本 10.0.16299.91
  • 获得 ecmangen.exe 的最小安装选项是“适用于桌面 C++ x86 应用的 Windows SDK”和“适用于桌面 C++ amd64 应用的 Windows SDK”(您应该同时安装两者)。

  • 安装 Windows 10 SDK 版本 10.0.15063.468 后,您会在以下位置找到 ecmangen.exe

    • "C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x86\ecmangen.exe"
    • "C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64\ecmangen.exe"
      • ,x64 二进制文件位于 x86 Program Files 目录下;,这很奇怪)。

现在,The documentation in the .NET example of using custom messages 说要运行命令 mc -s EventLogMsgs.mc 来构建消息,但是这是不正确的。

改为这样做:

  1. 确保来自 ecmangen.exe 的清单文件有效(假设它名为“manifest.man”)。
  2. 打开 Visual Studio 开发人员命令行提示窗口
    • 自 Windows 7.1 SDK 起,SDK 不再在开始菜单中包含其命令提示符快捷方式,因此请改为执行此操作,临时将其添加到您的 PATH 中,如下所示:
      1. "C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64" 复制到剪贴板(包括双引号) - 或者您的实际安装路径。
      2. 打开 cmd.exe(或先打开 PowerShell,然后运行 ​​cmd
      3. 在不按 Enter 的情况下输入:SET PATH=%PATH%;
      4. 粘贴步骤 1 中的路径(通常只需单击鼠标右键,或按 Shift + Insert 键)。
        • 所以你有 SET PATH=%PATH%;"C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64"
      5. 然后按回车
      6. cd %HOMEPATH%
      7. mc.exe -? 现在应该可以工作了。
  3. 在与第 2 步相同的开发人员命令提示符中,cd 到包含您的 manifest.manmessages.mc 文件的目录。
  4. 然后运行 ​​mc.exe messages.mc,它应该正常工作
    • 您现在应该会在同一目录中看到 manifest.hmanifest.rc(以及一些 .binTEMP.bin 文件...)输出。