Frage

Ich versuche, Leistungsindikatoren und benutzerdefinierte Ereignisse ein Stück Software hinzuzufügen, so dass ich diese mit dem Windows Performance Toolkit Programmen anzeigen kann, wie Xperf und GPUView. Ich werde Refrain, alle meine Kräfte Zurückhaltung unter Verwendung von Start in eine kathartische rant über den Zustand der Dokumentation für die Software und die Zeit, die ich jetzt zu necken Hinweise aus dem Internet versucht haben verschwendet. Ich werde beschreiben, wie ich, wo ich jetzt bin, falls diese zu anderen verlorenen Seelen verwendet wird.

Bisher habe ich gesammelt, dass ich ein Event-Manifest für meine Leistungsindikatoren und Ereignisse zu schreiben. Sie können dies von Hand tun oder mit einem Werkzeug namens ‚ ecmangen.exe ‘. Die Dokumentation für das Programm gibt einen schönen Schritt für Schritt Anleitung für Manifeste Ereignis zu schaffen, aber nicht erklären, wie diese mit Ihrem Code zu integrieren.

Der nächste Schritt, soweit ich arbeiten kann, ist zwei kryptische Anwendungen Befehlszeile verwenden ' mc.exe ' und ' CTRPP.exe '. Diese scheinen C oder C # Header, Quelle und Ressourcendateien für das Hinzufügen von Ereignis und Gegen Instrumentierung, um Ihren Code bzw. zu erzeugen. Als nächstes müssen Sie Ihren Code bauen (Blick auf die Proben in ‚C: \ Programme \ Microsoft SDKs \ Windows \ v7.1 \ Samples \ winbase \ Vielseitigkeits‘) und dann wir kommen, wo ich bin zur Zeit stecken: die die korrekte Verwendung des nächsten kryptischen Werkzeug ' wevtutil.exe

Dieses Werkzeug braucht zwei Dinge: die binäre (exe oder DLL), dass Sie mit diesen Ressourcen darin kompiliert haben und der Manifest-Datei, die Sie auf diese Ressourcen generieren verwendet. Das Problem das ich habe, ist, dass es sehr pingelig, wo die Binärdatei ist, und ich habe es nicht gelungen, die Form dieser pickiness zu bestimmen. Beschwörungen und Ziegen Opfer haben keine Ergebnisse gebracht.

Wenn ich einen Weg in dem ‚resourceFileName‘ Feld des ‚Anbieter‘ -Tag in der Manifest-Datei wie ‚c: \ mydir \ TEd.exe‘ definiert habe, dann ist es in Ordnung. Wenn jedoch habe ich die gleiche exe in einem anderen Ordner (einen, der ausgefallen war C: \ tw \ TEd.exe), es klagt.

Die Fehlermeldung gegeben ist ‚Warnung:. Verlag TEd-Ereignis-Provider Ressourcen nicht zugänglich sind‘. , aber nicht mehr Erklärung, warum, oder wo es versucht, zu sehen

Also, bin ich über das Gehen Instrumentierung in der falschen Art und Weise hinzugefügt, gibt es bereits eine Anleitung, die alle die gotchas und was ist die Natur von ‚wevtutil.exe ist seltsam Selektivität gegenüber Verzeichnisnamen erklärt.

Vielen Dank im Voraus,

Tim.

War es hilfreich?

Lösung

Ich habe genau das gerade hatte die gleiche Botschaft, und kämpfte für eine Stunde, um es zu lösen, bevor ich einen Geistesblitz hatte und lesen Sie den Fehler msg; -).

Die Lösung für mein Problem einfach war die „RC“ Datei auf mein Projekt hinzuzufügen, und dann wieder aufzubauen. Suchen Sie es zurück ist ziemlich offensichtlich, aber es hatte mich für eine Weile ratlos.

Hope, das hilft.


Bearbeiten - 4. Februar Ok, nicht ganz sicher, ob ich weiß, was dein Problem ist, aber der folgende Batch-Skript ist, wie ich das alles getan habe. Viel Glück.

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

Andere Tipps

Ich hatte das gleiche Problem - so gut ich kann sagen, es ist ein Verzeichnis Längenbegrenzung auf wevtutil. Wenn ich die Datei aus einem Verzeichnis mit einem kürzeren Pfad installiert ist, hat es funktioniert.

Falls jemand über diese kommt, können Sie tatsächlich bekommen die Dinge aus einem beliebigen Verzeichnis arbeiten:

Benutzer hinzufügen Lesen und Ausführen privs in ein Verzeichnis enthält, oder über Ihr Projekt:

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

Dann das Manifest der Installation sollte ohne Fehler arbeiten:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top