Анализ приложений для приложения WPF
В Visual Studio есть приложение WPF.
Могу ли я добавить информацию о приложениях в это приложение WPF?
Я хотел бы знать, сколько раз нажимается кнопка/плитка. Поскольку существует несколько установок
одного и того же приложения, я хотел бы знать, какая кнопка была нажата, сколько раз из какого пользователя/установки. Можно ли это сделать с помощью Application Insights?
Спасибо
Avanti
Ответы
Ответ 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);
- Записать событие/экран/исключение и т.д.
В любое время "что-то происходит" я разрешаю 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);
}
- Закрыть при закрытии приложения
Приложения 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).