使用wevtutil安装WPT清单时出现问题

时间:2011-01-13 11:17:32

标签: windows performance xperf

我正在尝试将性能计数器和自定义事件添加到一个软件中,以便我可以使用Windows Performance Toolkit程序(如XPerf和GPUView)查看这些内容。   我将利用我所有的克制力,克制关于软件文档状态以及我现在浪费时间试图从网络上挑逗线索的宣泄。我将描述我如何到达现在的位置,以防这对其他失落的灵魂有用。

到目前为止,我已经收集到了必须为我的演出计数器和事件编写一个事件清单。您可以手动或使用名为“ ecmangen.exe ”的工具执行此操作。该程序的文档为事件创建清单提供了一个很好的分步指南,但没有解释如何将这些与代码集成。

据我所知,下一步是使用两个神秘的命令行应用程序“ MC.exe ”和“ CTRPP.exe ”。这些似乎分别生成C或C#头,源和资源文件,用于向代码添加事件和计数器检测。   接下来,你必须构建你的代码(查看'C:\ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Samples \ winbase \ Eventing'中的示例)然后我们来到我目前卡住的地方:正确使用下一个神秘工具' wevtutil.exe '

此工具需要两件事:您使用其中的资源编译的二进制文件(exe或DLL)以及用于生成这些资源的清单文件。我遇到的麻烦是,它非常挑剔二进制文件的位置,而我无法确定这种挑剔的形式。咒语和山羊牺牲没有产生任何结果。

如果我在清单文件中的'provider'标签的'resourceFileName'字段中定义了一个路径,例如'c:\ MYDIR \ TEd.exe',那么它没问题。但是,如果我将相同的exe放在另一个文件夹中(失败的是C:\ tw \ TEd.exe),它会抱怨。

给出的错误消息是'警告:发布者TEd-Event-Provider资源无法访问。'但没有更多解释为什么或尝试查看的位置。

所以,我是否会以错误的方式添加工具,是否已经有一个解释所有问题的指南以及'wevtutil.exe对目录名称的奇怪选择性的本质是什么。

提前致谢,

3 个答案:

答案 0 :(得分:1)

我刚刚收到了完全相同的消息,并且在我有脑电波并读取错误消息之前,已经挣扎了一个小时来解决它。 - )。

我的问题的解决方案只是将“.rc”文件添加到我的项目中,然后重新构建。回顾它是相当明显的,但它让我有点困难。

希望这有帮助。


编辑 - 2月4日 好吧,不太确定我是否知道你的问题是什么,但下面的批处理脚本是我如何做到的。祝你好运。

rem -------------------------------------------------------------------
rem Do all of this from the project directory

rem -------------------------------------------------------------------
rem Generate Header and Resource - remove the ReadOnly attrib to "help" it along
attrib -r MyModuleTracing.h
mc.exe -um MyModuleTracing.xml
rem This generates MyModuleTracing.h and MyModuleTracing.rc, add both to your project

rem -------------------------------------------------------------------
rem ** Now build the project **
rem -------------------------------------------------------------------

rem Register MyModule Tracing with the system
if exist MyModuleTracing.xml (
  wevtutil um MyModuleTracing.xml

  copy MyModuleTracing.xml Release
  cd Release
  copy MyModule.dll %SystemRoot%\System32
  wevtutil im MyModuleTracing.xml
)

rem -------------------------------------------------------------------
rem Do a capture, and also export the results to an XML file.
xperf -start MyModuleSession -on [REPLACE_WITH_YOUR_GUID] -f MyModuleSession.etl
xperf -on base -f Kernel.etl

rem Run the app, wait until exit, and then stop the capture
start /wait MyModule.exe

xperf -stop
xperf -stop MyModuleSession
xperf -merge MyModuleSession.etl Kernel.etl MyModuleSessionMerged.etl

tracerpt MyModuleSessionMerged.etl -o MyModuleSessionMerged.xml -of XML

答案 1 :(得分:1)

我遇到了同样的问题 - 我可以说,wevtutil上有一个目录长度限制。当我从具有较短路径的目录安装文件时,它可以工作。

答案 2 :(得分:1)

如果遇到其他任何人,你实际上可以从任意目录中获取工作:

将USER Read& Execute添加到包含项目或项目之上的目录:

  

icacls projectdir /grant BUILTIN\Users:(OI)(CI)(RX)

然后安装清单应该没有错误:

  

wevtutil im yourmanifest.man /rf: c:\ full \ path \ to \ yourprogram.exe /mf: C:\全\路径\到\ yourprogram.exe