wevtutilを使用してWPTマニフェストのインストールの問題
-
10-10-2019 - |
質問
パフォーマンスカウンターとカスタムイベントをソフトウェアに追加しようとしているので、XperfやGPUViewなどのWindowsパフォーマンスツールキットプログラムを使用してこれらを表示できます。私は、すべての抑制の力を使用して、ソフトウェアのドキュメントの状態と、Webからの手がかりをいじめようとしているときに無駄になった時間に関するカタルシスの暴言を開始することを控えます。これが他の失われた魂に使用されている場合に備えて、私が今どこにいるかを説明します。
これまでのところ、私は自分のパフォーマンスカウンターやイベントのためにイベントマニフェストを書かなければならないことを収集しました。これを手作業で行うか、 'と呼ばれるツールを使用して行うことができます。Ecmangen.exe'。そのプログラムのドキュメントは、マニフェストを作成するイベントのためのステップバイステップガイドを提供しますが、これらをコードと統合する方法を説明していません。
次のステップは、私がうまくいく限り、2つの不可解なコマンドラインアプリケーションを使用することです。Mc.exe' と 'ctrpp.exe'。これらは、それぞれコードにイベントとカウンターインストゥルメンテーションを追加するためのCまたはC#ヘッダー、ソース、およびリソースファイルを生成するようです。次に、コードを作成する必要があります( 'c: program files microsoft sdks windows v7.1 samples winbase eventing'のサンプルを見てください)。次の謎めいたツールの正しい使用 'wevtutil.exe'
このツールには、それらのリソースをコンパイルしたバイナリ(exeまたはdll)と、それらのリソースを生成するために使用したマニフェストファイルの2つのものが必要です。私が抱えているのはそれがあるということです 非常に バイナリファイルがどこにあるかについてうるさい、そして私はこのピックネスの形を決定することができませんでした。呪文とヤギの犠牲は結果をもたらしませんでした。
「c: mydir ted.exe」などのマニフェストファイルに「プロバイダー」タグの「ResourceFileName」フィールドに定義されたパスがある場合、問題ありません。ただし、同じexeを別のフォルダーに入れた場合(失敗したものはc: tw ted.exeでした)、文句を言います。
与えられたエラーメッセージはです 「警告:出版社TED-Event-Providerリソースにはアクセスできません。」 しかし、その理由、またはどこを見ようとしたかについては、これ以上の説明はありません。
ですから、私は間違った方法で楽器を追加しようとしていますか?すでにすべてのゴッチャを説明するガイドがあり、「wevtutil.exeの奇妙な選択性の性質がディレクトリ名に対するものです。
前もって感謝します、
ティム。
解決
私はまったく同じメッセージを持っていて、脳波があり、エラーMSGを読む前に、それを解決するのに1時間苦労しました;-)。
私の問題の解決策は、単に「.RC」ファイルを私のプロジェクトに追加してから再構築することでした。振り返ってみると、それはかなり明白ですが、しばらくの間困惑していました。
お役に立てれば。
編集-2月4日OK、あなたの問題が何であるかがわからないかどうかはわかりませんが、次のバッチスクリプトは私がそれをどのようにしたかです。幸運を。
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
他のヒント
私は同じ問題を抱えていました - 私が言うことができる最高のものであるため、wevtutilにはディレクトリの長さの制限があります。パスが短いディレクトリからファイルをインストールすると、機能しました。
他の誰かがこれに出くわした場合、実際に任意のディレクトリから作業をすることができます。
ユーザーを追加して、PRIVをプロジェクトを含むディレクトリにPRIVを実行します。
icacls
ProjectDir/grant BUILTIN\Users:(OI)(CI)(RX)
次に、マニフェストをインストールすると、エラーなしで動作するはずです。
wevtutil im
yourmanifest.man/rf:
c: full path to yourprogram.exe/mf:
c: full path to yourprogram.exe