C++とC#で記述されたマニフェストベースのETWプロバイダがあります。どちらのプロバイダも同じマニフェストを使用します(C#コードのMicrosoft.Diagnostics.Tracing.TraceEvent
パッケージによって生成されます)。チャネルはデバッグです。 イベントのパブリッシングは両方のプロバイダで成功(戻り値は0)で、perfviewで表示されます。ETW C++プロバイダとC#プロバイダ
マニフェストがインストールされていない場合、C++プロバイダのイベントはプロバイダのGUID、イベントIDなどと共にperfviewに表示されます。プロバイダ名、イベント名などの「文字列」プロパティはありません。 しかし、C#プロバイダのイベントにはこれらのプロパティがあります。 なぜC#プロバイダがこれを行うことができますか? EventSource.csにはSendManifest
メソッドがあり、ManifestData
イベントはC#プロバイダーを使用する場合にのみ追加されます。これは理由ですか?もしそうなら、C++プロバイダはこの動作を達成できますか?
私はwevtutil.exeまたはeventregister.exeでマニフェストをインストールする方法を知っています。いくつかの調査の後、私はC++で「自己記述型」イベントを実装する必要があることを発見しました。
遅く返事を申し訳ありません。 Win10 SDKの製品がVistaまたはそれ以降で動作することはわかりませんが...これは「推奨」の方法かもしれません。私は後でそれを試してみる:)ありがとう! – user1208