UWP FileWatcher BackgroundTask

Я новичок здесь и в настоящее время программирую UWP для рабочего стола Windows 10 для своей компании, которая должна проверять текстовый файл с помощью фоновой задачи и обновлять плитку UWP / вторичную плитку UWP.

Проверка пользовательских библиотек с помощью StorageLibraryContentChangedTrigger проста и работает нормально. Но моя компания говорит, что пользовательские библиотеки не стоит сохранять txt-файл (пример 1):

StorageLibrary videosLib = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Videos);
StorageLibraryContentChangedTrigger videoTrigger = StorageLibraryContentChangedTrigger.Create(videosLib);

taskBuilder = new BackgroundTaskBuilder();
taskBuilder.Name = taskNameFileChanged;
taskBuilder.TaskEntryPoint = taskFileChangedEntryPoint;
taskBuilder.SetTrigger(videoTrigger);
register = taskBuilder.Register();

Проверка локальной папки приложения с помощью этого кода (пример 2):

List<string> typeFilter = new List<string>();
typeFilter.Add(".txt");
var queryoptions = new Windows.Storage.Search.QueryOptions(Windows.Storage.Search.CommonFileQuery.OrderByName, typeFilter);
var query = ApplicationData.Current.LocalFolder.CreateFileQueryWithOptions(options);

 //subscribe on query's ContentsChanged event
 query.ContentsChanged += Query_ContentsChanged;


 private void Query_ContentsChanged(Windows.Storage.Search.IStorageQueryResultBase sender, object args)
 {
     Debug.WriteLine("File has changed!!!!");
 }

тоже работает, но только если UWP открыт/активен.

Q1: Есть ли способ, который запускает ApplicationData.Current.LocalFolder, поэтому я могу сказать, например. "ApplicationData.Current.LocalFolder.ContentChangedTrigger"?

Q2: Если Q1 невозможен, как еще я могу проверить ApplicationData.Current.LocalFolder на наличие изменений содержимого с помощью фоновой задачи?

Q3: Я знаю, что UWP работает в песочнице, но может ли UWP иметь ограниченный доступ к разделу реестра Windows? Доступа для чтения уже будет достаточно.

Заранее спасибо за ответы :-)


person T. Fischer    schedule 21.06.2017    source источник


Ответы (1)


Q1: Есть ли способ, который запускает ApplicationData.Current.LocalFolder, поэтому я могу сказать, например. "ApplicationData.Current.LocalFolder.ContentChangedTrigger"?

Нет, насколько я понимаю. Однако с помощью StorageLibraryContentChangedTrigger можно поместите текстовый файл в библиотеку документов, возможно, это имеет смысл для вашей компании. Я бы сказал вашей компании, что идеальное приложение UWP на данный момент — это мечта.

Q2: Если Q1 невозможен, как еще я могу проверить ApplicationData.Current.LocalFolder на наличие изменений содержимого с помощью фоновой задачи?

Вы можете зарегистрировать фоновую задачу Таймер, затем проверяйте дату последнего изменения файла каждые 15 минут в фоновом режиме. Другой альтернативный способ — использовать push-уведомления для обновления плитки вместо локального текстового файла.

Q3: Я знаю, что UWP работает в песочнице, но может ли UWP иметь ограниченный доступ к разделу реестра Windows? Доступа для чтения уже будет достаточно.

No.

Изменить

Для доступа вам потребуется ограниченная возможность Documents. папку Документы. Чтобы это работало для разработки, вручную добавьте запись в файл xml Package.manifest:

<uap:Capability Name="documentsLibrary"/>

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

Любой может запросить доступ к этой возможности для отправки в магазин.

person Mehrzad Chehraz    schedule 21.06.2017
comment
Большое спасибо :-). Я уже думал, что нет такого триггера, как ApplicationData.Current.LocalFolder.ContentChangedTrigger. С библиотекой документов я всегда получаю сообщение об ошибке отказа в доступе. Все остальные библиотеки работают отлично. Когда я просматриваю файл Package.appxmanifest с помощью Visual Studio 2017, я могу выбрать только библиотеки «Изображения», «Музыка» и «Видео» в качестве возможностей. Если я не ошибаюсь, доступ к библиотеке документов только для Microsoft. - person T. Fischer; 23.06.2017
comment
@T.Fischer Я обновил ответ для библиотеки документов. Это не только Microsoft, но вам нужно запросить доступ для отправки. - person Mehrzad Chehraz; 23.06.2017