WPF应用程序的应用程序见解

时间:2014-10-22 10:32:33

标签: wpf visual-studio azure-devops azure-application-insights

有一个用Visual Studio编写的WPF应用程序。 我可以将Application Insights添加到此WPF应用程序中吗? 我想知道点击按钮/磁贴的次数。由于有多个安装 对于相同的应用程序,我想知道哪个按钮被点击了多少次用户/安装。可以使用Application Insights完成吗?

由于 阿凡提

3 个答案:

答案 0 :(得分:30)

虽然未列为支持的应用类型,但这意味着没有收集/发送到应用程序洞察的默认遥测数据,也不支持添加AI /创建应用程序洞察资源。据说可以通过几个手动步骤添加到您的WPF,以便您可以跟踪您提到的特定场景(如按钮/平铺点击)。

- 从Visual Studio中将“Application Insights API”NuGet添加到项目中(.11是今天的最新版本。)

这将添加Application Insights API参考并为您的项目创建应用程序洞察配置文件。

需要使用您的检测密钥更新applicationinsights.config文件,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings" schemaVersion="2014-05-30">
    <TelemetryChannel>
        <DeveloperMode>false</DeveloperMode>
    </TelemetryChannel>
    <TelemetryModules>
        <Add Type="Microsoft.ApplicationInsights.Tracing.DiagnosticsTelemetryModule, Microsoft.ApplicationInsights"/>
    </TelemetryModules>
    <InstrumentationKey>**your-instrumentation-key-guid**</InstrumentationKey>
</ApplicationInsights>

创建应用程序见解检测密钥登录到您的azure订阅。 https://portal.azure.com 单击+以创建Application Insights资源。 然后在应用程序见解刀片上选择属性磁贴,并复制Instrumentation键并将其添加到applicationinsights.config文件中。 现在,在您的WPF应用程序中,您可以使用Application Insights sdk,如下所述:http://blogs.msdn.com/b/visualstudioalm/archive/2014/10/21/application-insights-sdk-0-11-0-prerelease.aspx

您的事件将在诊断搜索刀片中可见,可以在应用程序见解刀片上选择。

注意:遥测技术在发送到服务之前在本地批量处理1分钟,除非&gt; 500个遥测事件排队,此时它们将被发送。

答案 1 :(得分:11)

https://azure.microsoft.com/en-us/documentation/articles/app-insights-windows-desktop/

Microsoft关于如何将Application Insights添加到Windows窗体应用程序的官方链接。从链接:

在Azure中 - portal.azure.com

  1. 创建应用程序资源。 ::新/开发者服务/应用程序见解。
  2. 注意生成的检测密钥,抓取副本并将其放在一边,我们在配置您的应用程序时需要它。
  3. 在您的申请中

    1. NuGet - 添加'Application Insights API'
    2. 配置您的TelemetryClient
    3. 我在WPF应用程序中使用MvvmCross,在启动时我创建了一个TelemetryClient,我在整个应用程序中重复使用。

      var telemetryClient = new TelemetryClient();
      telemetryClient.InstrumentationKey = "your key here from Azure";
      telemetryClient.Context.Session.Id = Guid.NewGuid().ToString();
      telemetryClient.Context.User.AccountId = Username;
      telemetryClient.Context.Component.Version = Settings.Default.Version; 
      telemetryClient.TrackEvent("Application Start");
      Mvx.RegisterSingleton<TelemetryClient>(telemetryClient);
      
      1. 记录事件/屏幕/异常等
      2. 任何时候'事情发生'我将解决TelemetryClient并记录事件。这与跟踪和记录的任何其他Application Insights实现一样。

        作为一个例子 -

        //Resolve the telemetry client
        readonly TelemetryClient telemetryClient = Mvx.Resolve<TelemetryClient>();
        
        //Record a page View with some extra information
        var pageviewTelemetry = new PageViewTelemetry("Observations");
        pageviewTelemetry.Properties.Add("Breadcrumb", breadcrumb);
        telemetryClient.TrackPageView(pageviewTelemetry);
        
        //Track an event
        var eventTelemetry = new EventTelemetry("Observation Saved");            
        eventTelemetry.Properties.Add("Saved Observation", observation);
        telemetryClient.TrackEvent(eventTelemetry);
        
        //Track an exception
        try
        {
          // do work here
        }
        catch (Exception ex)
        {
            telemeteryClient.TrackException(ex);
        }
        
        1. 刷新申请退出
        2. Windows桌面应用程序的Application Insights不会自动收集/发送任何内容。作为开发人员,需要在应用程序退出时强制刷新。

          private void PowerButton_OnClick(object sender, RoutedEventArgs e)
          {
              var tc = Mvx.Resolve<TelemetryClient>();
              if (null != tc)
              {
                  tc.Flush(); // only for desktop apps
              }            
              Application.Current.Shutdown();            
          }
          

          或设置一个RxTimer按时间表冲洗......我决定每隔30分钟冲洗一次:

          var observable = Observable.Interval(new TimeSpan(0, 0, 30, 0));
          observable.Subscribe(_ =>  Application.Current.Dispatcher.Invoke(new Action(() =>
          {
              var tc = Mvx.Resolve<TelemetryClient>();
              if (null != tc)
              {
                  tc.Flush(); // only for desktop apps
                  Console.WriteLine("Flush TC");
              }
          })));
          

          仅供参考 - 从Application Insights API NuGet包的0.17.0开始,如果您处于脱机状态,则刷新呼叫不会挂起,但会显示。在线,呼叫立即完成,离线在呼叫完成前有5秒暂停。

答案 2 :(得分:6)

桌面应用程序的应用程序洞察(AI)正在被弃用,而不是HockeyApp。它还没有过于成熟,但它确实有效(事件基本上达到AI事件的相同位置)。

例如,这是它在RoslynPad(WPF C#编辑器)中的外观:

using Microsoft.HockeyApp;


//In your initialization method:
var hockeyClient = (HockeyClient)HockeyClient.Current;

hockeyClient.Configure(HockeyAppId)
    .RegisterCustomDispatcherUnhandledExceptionLogic(OnUnhandledDispatcherException)
    .UnregisterDefaultUnobservedTaskExceptionHandler();

var platformHelper = (HockeyPlatformHelperWPF)hockeyClient.PlatformHelper;
platformHelper.AppVersion = _currentVersion.ToString();

hockeyClient.TrackEvent("App Start");

//sometime later:
hockeyClient.TrackEvent("Something happened");

编辑看起来需要以下NuGet包才能使其正常运行:https://www.nuget.org/packages/HockeySDK.WPF.TelemetryWorkaround(请参阅https://github.com/bitstadium/HockeySDK-Windows/pull/88)。