4

XPerf や GPUView などの Windows Performance Toolkit プログラムを使用してこれらを表示できるように、パフォーマンス カウンターとカスタム イベントをソフトウェアに追加しようとしています。ソフトウェアのドキュメントの状態や、Web から手がかりをつかもうとして無駄にしてしまった時間について、カタルシスのような暴言を吐き出すことは、自制のすべての力を使って差し控えるつもりです。これが他の失われた魂に役立つ場合に備えて、私がどのようにして現在の場所にたどり着いたかを説明します.

ここまでで、パフォーマンス カウンターとイベントのイベント マニフェストを作成する必要があることがわかりました。これは、手動で行うか、' ecmangen.exe 'というツールを使用して行うことができます。そのプログラムのドキュメントには、マニフェストを作成するイベントの段階的なガイドが記載されていますが、これらをコードに統合する方法については説明されていません。

私が理解できる限り、次のステップは、2 つの不可解なコマンド ライン アプリケーション ' MC.exe ' と ' CTRPP.exe ' を使用することです。これらは、C または C# のヘッダー、ソース ファイル、およびリソース ファイルを生成して、イベントおよびカウンター インストルメンテーションをコードにそれぞれ追加するようです。次に、コードをビルドする必要があります ('C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\winbase\Eventing' のサンプルを見てください)。次の不可解なツール ' wevtutil.exe ' の正しい使用

このツールには 2 つのものが必要です。これらのリソースを使用してコンパイルしたバイナリ (exe または DLL) と、それらのリソースを生成するために使用したマニフェスト ファイルです。私が抱えている問題は、バイナリ ファイルがどこにあるかについて非常にうるさいことです。呪文とヤギの生贄は何の成果ももたらさなかった。

「c:\MYDIR\TEd.exe」などのマニフェスト ファイルの「provider」タグの「resourceFileName」フィールドにパスが定義されていれば問題ありません。ただし、同じ exe を別のフォルダー (失敗したフォルダーは C:\tw\TEd.exe) に置くと、問題が発生します。

表示されるエラー メッセージは、「警告: パブリッシャー TEd-Event-Provider リソースにアクセスできません」です。しかし、なぜ、またはどこを見ようとしたのかについては、これ以上の説明はありません。

それで、私は間違った方法でインストルメンテーションを追加しようとしていますか、すべての落とし穴とディレクトリ名に対する「wevtutil.exeの奇妙な選択性の性質」を説明するガイドがすでにありますか.

前もって感謝します、

ティム。

4

3 に答える 3

1

私はまったく同じメッセージを受け取り、それを解決するのに1時間苦労しました。その後、脳波が発生してエラーメッセージを読みました;-)。

私の問題の解決策は、単に「.rc」ファイルをプロジェクトに追加してから、再ビルドすることでした。振り返ってみるとかなり当たり前ですが、しばらく困惑しました。

お役に立てれば。


編集-2月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
于 2011-01-25T16:40:47.747 に答える
1

私も同じ問題を抱えていました。私が知る限り、wevtutil にはディレクトリの長さの制限があります。パスが短いディレクトリからファイルをインストールすると、機能しました。

于 2011-08-25T15:34:22.440 に答える