Подтвердить что ты не робот

Анализ приложений для приложения WPF

В Visual Studio есть приложение WPF. Могу ли я добавить информацию о приложениях в это приложение WPF? Я хотел бы знать, сколько раз нажимается кнопка/плитка. Поскольку существует несколько установок одного и того же приложения, я хотел бы знать, какая кнопка была нажата, сколько раз из какого пользователя/установки. Можно ли это сделать с помощью Application Insights?

Спасибо Avanti

4b9b3361

Ответ 1

Пока он не указан в качестве поддерживаемого типа приложения, это означает, что данные по телеметрии, собранные/отправленные по умолчанию, отсутствуют, а также нет поддержки для добавления AI/создания ресурса для поиска приложений. При этом можно добавить в свой WPF несколько ручных шагов, чтобы вы могли отслеживать конкретные сценарии, которые вы упомянули (например, щелчок кнопки/плитки).

-From Visual studio добавляет в проект "API-интерфейс Application Insights" NuGet (.11 является последним сегодня).

Это добавит ссылку API Insight 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>

Чтобы создать ключ доступа к приложениям, войдите в свою лазурную подписку. https://portal.azure.com Нажмите +, чтобы создать ресурс Application Insights. Затем выберите свойство tile в лексике приложений и скопируйте ключ Instrumentation и добавьте его в файл applicationinsights.config. Теперь в вашем приложении WPF вы можете использовать SPS приложения Insight, как описано здесь: http://blogs.msdn.com/b/visualstudioalm/archive/2014/10/21/application-insights-sdk-0-11-0-prerelease.aspx

ваши события будут видны в диагностическом лезвии поиска, который может быть выбран на лезвиях поиска приложений.

Примечание: телеметрия размещается локально в течение 1 минуты перед отправкой в ​​службу, если > 500 телеметрических событий не поставлены в очередь, после чего они отправляются.

Ответ 2

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

Официальная ссылка Microsoft о том, как добавить Application Insights в приложение Windows Forms. По ссылке:

В Azure - portal.azure.com

  • Создание ресурса приложения.:: Новые/Услуги разработчика/Анализ приложений.
  • Обратите внимание на сгенерированный ключ инструментария, возьмите копию и отложите ее в сторону, мы будем нуждаться в ней при настройке вашего приложения.

В вашем приложении

  • NuGet - Добавить API приложений для приложений
  • Настройте TelemetryClient.

Я использую MvvmCross в приложении WPF, при запуске я создаю один 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. Записать событие/экран/исключение и т.д.

В любое время "что-то происходит" я разрешаю 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. Закрыть при закрытии приложения

Приложения Insights для приложений Windows Desktop автоматически не собирают/не отправляют. В качестве разработчика нужно принудительно выполнить сброс при выходе приложения.

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");
    }
})));

FYI. Начиная с 0.17.0 пакета API NuGet Application Insights API, если вы находитесь в автономном режиме, вызов flush не зависает, но появляется. В режиме онлайн вызов завершается немедленно, в автономном режиме перед завершением вызова происходит пауза в 5 секунд.

Ответ 3

Application Insights (AI) для настольных приложений устаревает в пользу HockeyApp. Это еще не слишком зрело, но оно работает (события по существу достигают того же места, когда происходят события ИИ).

Например, здесь, как он выглядит в RoslynPad (редактор WPF С#):

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).