在混合技术中重用ETW机制

时间:2018-05-29 14:07:40

标签: c# uwp microsoft-edge etw microsoft-edge-extension

我正致力于为EDGE浏览器开发扩展程序。扩展(UWP App)由3部分组成:

  1. 扩展本身。 (JavaScript代码)
  2. 用于本机消息传递的UWP应用程序。 (UWP)
  3. 允许与c ++桌面应用程序交互的Desktop Bridge应用程序。(C#)
  4. 另外,我有一个用C ++编写的桌面应用程序。基本上,扩展需要与我的桌面应用程序建立通信,并使我的桌面应用程序能够获取有关该网页的一些信息。 我的桌面应用程序具有跟踪功能,它使用ETW机制进行跟踪。 它有一个 Controller 对象,负责管理跟踪会话;它具有提供程序,提供跟踪某些特定事件的能力,并且具有消费者 - 一个能够显示所跟踪的所有内容的对象。

    会话拥有自己独特的名称和GUID。

    提供商拥有自己的GUID。

    提供者在会话中注册自己,以便Session接受特定Provider生成的事件。

    现在的问题是: 是否能够使用我已有的跟踪基础结构(使用C ++编写),C#应用程序(使用EventSource)和UWP应用程序(使用LoggingChannel,LoggingSession等)。

    我已经做了一些尝试,但没有成功。

    对于UWP应用程序,我尝试通过指定跟踪会话的NAME来创建LoggingSession,但它不起作用。我的c ++消费者没有收到有关新事件发生的通知。 我还尝试了创建LoggingChannel并指定我的跟踪会话GUID:

    channel = new LoggingChannel(DEFAULT_CHANNEL_NAME, null, new Guid("xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"));
    

    但它崩溃了例外:

      

    其他信息:访问被拒绝。 (HRESULT异常:0x80070005(E_ACCESSDENIED))

1 个答案:

答案 0 :(得分:0)

请阅读此处的文档:(https://docs.microsoft.com/en-us/microsoft-edge/extensions/guides/native-messaging#adding-a-desktop-bridge-component),以创建使用NativeMessaging + Desktop Bridge的Edge Extensions。必须将Extension和运行时组件(UWP)打包在同一个包中以启用NativeMessaging功能。

您可以尝试https://github.com/MicrosoftEdge/MicrosoftEdge-Extensions-Demos/tree/master/SecureInput处的GitHub示例来了解此架构。