Проблема с установкой манифеста WPT с помощью wevtutil - PullRequest
4 голосов
/ 13 января 2011

Я пытаюсь добавить счетчики производительности и настраиваемые события в часть программного обеспечения, чтобы просматривать их с помощью программ 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), скомпилированный с этими ресурсами, и манифестфайл, который вы использовали для создания этих ресурсов.Проблема в том, что я очень требователен к тому, где находится бинарный файл, и я не смог определить форму этой разборчивости.Заклинания и жертвы козлов не дали результатов.

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

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

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

Спасибо зазаранее,

Тим.

Ответы [ 3 ]

1 голос
/ 25 августа 2011

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

1 голос
/ 04 декабря 2014

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

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

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

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

wevtutil im yourmanifest.man /rf: c: \ полный \ путь \ к \ yourprogram.exe /mf: c: \ полный \ путь \ к \ yourprogram.exe

1 голос
/ 25 января 2011

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

Решением моей проблемы было простоедобавьте файл ".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
...