Domanda

Sto cercando di aggiungere i contatori delle prestazioni e gli eventi personalizzati per un pezzo di software, in modo che possa vedere questi programmi che utilizzano Windows Performance Toolkit quali XPerf e GPUView. Ho intenzione di astenersi, con tutte le mie forze di moderazione, da lanciarsi in uno sproloquio catartico per quanto riguarda lo stato della documentazione per il software e il tempo che ho sprecato ora cercando di prendere in giro gli indizi dal web. Io vado a descrivere come sono arrivato al punto in cui mi trovo ora, nel caso in cui questo è utile per altre anime perse.

Finora, ho capito che devo scrivere un manifesto di eventi per i miei contatori delle prestazioni e gli eventi. È possibile farlo a mano o utilizzando uno strumento chiamato ' ecmangen.exe '. La documentazione per il programma dà una bella guida passo passo per la creazione di eventi si manifesta, ma non spiega come integrare questi con il vostro codice.

Il prossimo passo, per quanto posso capire, è quello di utilizzare due applicazioni a riga di comando criptico ' MC.exe ' e ' CTRPP.exe '. Questi sembrano generare C o C # intestazioni, sorgente e file di risorse per l'aggiunta di evento e la strumentazione in contrasto con il codice, rispettivamente. Successivamente, è necessario costruire il proprio codice (sguardo ai campioni in 'C: \ Program Files \ Microsoft SDK \ Windows \ v7.1 \ Samples \ winbase \ Eventing') e poi arriviamo a dove sto attualmente bloccato: il uso corretto del prossimo strumento criptico ' wevtutil.exe '

Questo strumento ha bisogno di due cose: il binario (EXE o DLL) che hai compilato con quelle risorse in esso e il file manifesto che avete usato per generare quelle risorse. Il problema che sto avendo è che si tratta di molto esigente dove il file binario è e sono stato in grado di determinare la forma di questa pickiness. Incantesimi e sacrifici di capra hanno prodotto alcun risultato.

Se ho un percorso definito nel campo 'resourceFileName' del tag 'provider' nel file manifesto come 'c: \ dir \ TEd.exe' allora va bene. Se, tuttavia, ho messo lo stesso exe in una cartella diversa (uno che non è riuscita era C: \ tw \ TEd.exe), si lamenta.

Il messaggio di errore dato è 'Attenzione:. Risorse Editore TED-Event-Provider non sono accessibili'. , ma non più spiegazione del perché, o dove si è cercato di guardare

Quindi, sto andando circa l'aggiunta della strumentazione in modo sbagliato, c'è già una guida che spiega tutti i trucchi e qual è la natura di 'wevtutil.exe strano selettività verso i nomi delle directory.

Grazie in anticipo,

Tim.

È stato utile?

Soluzione

Ho appena avuto esattamente lo stesso messaggio, e ha lottato per un'ora per risolverlo, prima ho avuto un lampo di genio e leggere il msg di errore; -).

La soluzione al mio problema era semplicemente di aggiungere il file "RC" per il mio progetto, e poi ri-build. Guardando indietro è abbastanza ovvio, ma mi aveva perplesso per un po '.

Spero che questo aiuti.


Modifica - 4 febbraio Ok, non troppo sicuro se so che cosa il vostro problema è, ma il seguente script batch è come ho fatto tutto. Buona fortuna.

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

Altri suggerimenti

Ho avuto lo stesso problema - come meglio posso dire, c'è un limite di lunghezza directory su wevtutil. Quando ho installato il file da una directory con un percorso più breve, ha funzionato.

Nel caso in cui nessun altro si imbatte in questo, si può effettivamente far funzionare le cose da una directory arbitraria:

Aggiungi utente Lettura ed esecuzione privs in una directory che contiene o al di sopra del progetto:

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

Poi si installa il manifesto dovrebbe funzionare senza gli errori:

wevtutil im yourmanifest.man /rf: c: \ piena \ percorso \ a \ yourprogram.exe /mf: c: \ piena \ percorso \ a \ yourprogram.exe

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top