Проблема с установкой манифеста WPT с помощью wevtutil

Я пытаюсь добавить счетчики производительности и пользовательские события в часть программного обеспечения, чтобы я мог просматривать их с помощью программ Windows Performance Toolkit, таких как XPerf и GPUView. Я собираюсь воздержаться, используя все свои силы сдержанности, от разглагольствования о состоянии документации к программному обеспечению и времени, которое я сейчас потратил впустую, пытаясь выудить подсказки из Интернета. Я собираюсь описать, как я оказался там, где я сейчас нахожусь, на случай, если это будет полезно другим заблудшим душам.

Пока я понял, что мне нужно написать манифест событий для моих счетчиков производительности и событий. Вы можете сделать это вручную или с помощью инструмента под названием «ecmangen.exe». Документация к этой программе дает хорошее пошаговое руководство по созданию манифестов событий, но не объясняет, как интегрировать их в ваш код.

Следующим шагом, насколько я понимаю, является использование двух загадочных приложений командной строки «MC.exe» и «CTRPP.exe». Похоже, что они генерируют заголовки C или C#, исходные файлы и файлы ресурсов для добавления инструментов событий и счетчиков в ваш код соответственно. Затем вам нужно создать свой код (посмотрите примеры в «C:\Program Files\Microsoft SDK\Windows\v7.1\Samples\winbase\Eventing»), а затем мы подойдем к тому, на чем я сейчас застрял: правильное использование следующего зашифрованного инструмента 'wevtutil.exe'

Этому инструменту нужны две вещи: двоичный файл (exe или DLL), который вы скомпилировали с этими ресурсами, и файл манифеста, который вы использовали для создания этих ресурсов. У меня проблема в том, что он очень придирчив к тому, где находится двоичный файл, и я не смог определить форму этой придирчивости. Заклинания и жертвоприношения козла не дали результатов.

Если у меня есть путь, определенный в поле «resourceFileName» тега «provider» в файле манифеста, например «c:\MYDIR\TEd.exe», тогда все в порядке. Однако, если я помещаю тот же exe-файл в другую папку (неудачной была C:\tw\TEd.exe), он жалуется.

Выдается сообщение об ошибке 'Предупреждение: ресурсы Publisher TEd-Event-Provider недоступны', но больше нет объяснений, почему или где он пытался искать.

Итак, я собираюсь добавить инструментарий неправильным образом, есть ли уже руководство, объясняющее все подводные камни и какова природа странной избирательности wevtutil.exe по отношению к именам каталогов.

Заранее спасибо,

Тим.


person Luther    schedule 13.01.2011    source источник


Ответы (3)


У меня только что было точно такое же сообщение, и я целый час пытался его решить, прежде чем у меня возникла мозговая волна и я прочитал сообщение об ошибке ;-).

Решение моей проблемы состояло в том, чтобы просто добавить файл ".rc" в мой проект, а затем перестроить. Оглядываясь назад, это довольно очевидно, но на какое-то время это поставило меня в тупик.

Надеюсь это поможет.


Редактировать — 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
person RichS    schedule 25.01.2011
comment
Спасибо, Рич, завтра попробую. - person Luther; 01.02.2011
comment
Теперь у меня все работает, поэтому, если вы все еще не можете заставить работать свои, дайте мне знать, и я опишу, что я сделал. - person RichS; 03.02.2011
comment
Ах, до сих пор нет кости. Я уже добавлял файлы «.rc», по крайней мере, два с именами «XXXXX_manifest.rc» и «XXXXX_profile_events.rc». - person Luther; 03.02.2011
comment
Меня смущает тот факт, что это работает, если выходной каталог находится в одном месте, но не в другом. - person Luther; 03.02.2011

У меня была та же проблема - насколько я могу судить, для wevtutil существует ограничение на длину каталога. Когда я установил файл из каталога с более коротким путем, он сработал.

person Yostage    schedule 25.08.2011

На случай, если кто-то еще столкнется с этим, вы можете заставить все работать из произвольного каталога:

Добавьте привилегии USER Read&Execute в каталог, содержащий ваш проект или над ним:

icacls каталог проекта /grant BUILTIN\Users:(OI)(CI)(RX)

Тогда установка манифеста должна работать без ошибок:

wevtutil im yourmanifest.man /rf:c:\full\path\to\yourprogram.exe /mf:c:\full\path\to\yourprogram.exe

person gigadude    schedule 03.12.2014