Почему StorageFile.GetFilesAsync () аварийно завершает работу в dll? - PullRequest
0 голосов
/ 11 ноября 2018

Я сделал dll из UWP и использую в нем StorageFile.GetFilesAsync().

Вот код:

Task.Factory.StartNew(async () =>
{
    StorageFolder SFolder = KnownFolders.RemovableDevices;
    try
    {
        IReadOnlyList<StorageFile> SFile = await SFolder.GetFilesAsync();
    }
    catch (Exception ex)
    {
        throw ex;
    }
}); 

После того, как я запустил программу, она вылетела за исключением:

{System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()

Кажется, у меня нет прав доступа к файлу. Однако я проверил программу UWP, которая ссылалась на dll, программа UWP уже объявила о возможностях съемного хранилища.

enter image description here

Что с этим не так? Подскажите, пожалуйста, как это решить? Спасибо.

1 Ответ

0 голосов
/ 12 ноября 2018

Как указано в документации , для использования папки KnownFolders.RemovableDevices есть две предпосылки:

Для доступа к папке съемных устройств необходимо:

  • В манифесте приложения укажите возможность съемного хранилища .
  • В манифесте приложения зарегистрируйте хотя бы одно объявление ассоциации типов файлов .Это объявление явно указывает типы файлов (расширения), к которым ваше приложение хочет получить доступ на съемных устройствах.Приложение может только перечислять, создавать или изменять файлы, типы файлов которых объявлены в манифесте приложения.Для получения дополнительной информации см. Обработка активации файла.

В соответствии с вашим вопросом вы выполнили первое условие, но вам также необходимо выполнить второе - указать типы файлов вашего приложения.работает с.Это можно сделать на вкладке Package.appxmanifest Объявления .Там вы выбираете Ассоциации типов файлов в раскрывающемся списке и заполняете обязательные поля.

Причина, по которой доступ к съемному хранилищу ограничен только указанными вами типами файлов, является дополнительной мерой безопасности,так что пользователь может быть уверен, что приложение не делает ничего вредного.Если вам нужен полный доступ к расположению файловой системы, вам нужно будет использовать встроенную FolderPicker или broadFilesystemAccess возможность (которая, однако, ограничена и проверена в Microsoft Storeсертификации, есть ли у приложения на самом деле веские основания для его объявления).

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