broadFileSystemAccess для UWP не работает - PullRequest
0 голосов
/ 18 января 2020

Я пишу приложение, которому нужно разрешение для доступа к текстовому файлу, потому что без разрешения оно выдает исключение «доступ запрещен». Я добавил в Package.appxmanifest спецификацию c строк

xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities

"IgnorableNamespaces="uap mp rescap"

И

<rescap:Capability Name="broadFileSystemAccess" />

Но все равно это не работает. Есть ли другой способ получить доступ к указанному файлу c с помощью средства выбора?

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Вы можете использовать методы класса AppCapability , чтобы запросить состояние возможности приложения и запросить доступ, который может запрашивать пользователя в зависимости от ряда геополитических ограничений, которые могут быть изменены через некоторое время. Метод CheckAccess () предоставит статус возможности во время вызова. Приложение может настроить свое поведение на основе результатов. В идеале приложение должно отображать какое-то указание пользователю, если оно работает в режиме ограниченной функциональности, со ссылкой на более подробную информацию и инструкции о том, как включить полную функциональность.

0 голосов
/ 22 января 2020

Да, поведение изменилось между выпусками с апреля 2018 года по октябрь 2018 года, и по умолчанию теперь отключено Это ограничение конфиденциальности - мы очень сосредоточены на сохранении конфиденциальности пользователя. Документация для этого актуальна: https://docs.microsoft.com/en-us/windows/uwp/files/file-access-permissions#accessing -Additional-location . На данный момент, если вы хотите определить, включен или отключен параметр, вы можете просто попытаться получить доступ к какому-либо файлу / папке, для которых этот параметр предоставит вам разрешение, если оно включено, и запретить разрешение, если оно отключено (например, "C : \ "). Если этот параметр отключен, вы можете запустить приложение «Настройки» на странице конфиденциальности файловой системы. Например:

protected override async void OnNavigatedTo(NavigationEventArgs e)
{
    try
    {
        StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(@"C:\");
        // do work
    }
    catch
    {
        MessageDialog dlg = new MessageDialog(
            "It seems you have not granted permission for this app to access the file system broadly. " +
            "Without this permission, the app will only be able to access a very limited set of filesystem locations. " +
            "You can grant this permission in the Settings app, if you wish. You can do this now or later. " +
            "If you change the setting while this app is running, it will terminate the app so that the " +
            "setting can be applied. Do you want to do this now?",
            "File system permissions");
        dlg.Commands.Add(new UICommand("Yes", new UICommandInvokedHandler(InitMessageDialogHandler), 0));
        dlg.Commands.Add(new UICommand("No", new UICommandInvokedHandler(InitMessageDialogHandler), 1));
        dlg.DefaultCommandIndex = 0;
        dlg.CancelCommandIndex = 1;
        await dlg.ShowAsync();
    }
}

private async void InitMessageDialogHandler(IUICommand command)
{
    if ((int)command.Id == 0)
    {
        await Launcher.LaunchUriAsync(new Uri("ms-settings:privacy-broadfilesystemaccess"));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...