У меня есть приложение WPF, упакованное с проектом пакета моста рабочего стола. В проекте WPF установлен nuget Microsoft.Windows.SDK.Contracts. В package.appxmanifest я добавил соответствующее разрешение:
<Extensions>
<Extension Category="windows.publisherCacheFolders">
<PublisherCacheFolders>
<Folder Name="SomeFolder" />
</PublisherCacheFolders>
</Extension>
</Extensions>
И я хочу поделиться некоторой информацией между несколькими приложениями WPF и UWP, принадлежащими одному издателю. Я вызываю Windows Runtime API:
var folder = Windows.Storage.ApplicationData.Current.GetPublisherCacheFolder("SomeFolder");
var file = await folder.CreateFileAsync("SomeFile", CreationCollisionOption.OpenIfExists);
и я получаю System.UnauthorizedAccessException: «Доступ запрещен. Нет доступа к указанному файлу или папке (C: \ Users ‹myusername› \ AppData \ Local \ Publishers \ 5w92pj7ar334m \ SomeFolder \ SomeFile). Убедитесь, что элемент не отмечен системными или скрытыми атрибутами файла. '
в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача задачи) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification. .GetResult () в GetPublisherFolderWPF.MainWindow. ‹MainWindow_Loaded› d__1.MoveNext ()
Папки 5w92pj7ar334m и SomeFolder были созданы после развертывания этого приложения, а файл SomeFile также был создан с нулевым размером.
Это происходит в Windows 2004 и 20H2. В более ранних версиях Windows 10 этот код работает хорошо.
CreationCollisionOption.GenerateUniqueName
, который автоматически добавляет номер к основанию указанного имени, если папка уже существует. - person Arya Ding - MSFT   schedule 16.04.2021CreationCollisionOption.GenerateUniqueName
он создает файл и может записывать данные в файл, но после этого он не может даже читать из файлаawait folder.GetFileAsync("SomeFile")
с тем же исключением:UnauthorizedAccessException: 'Access is denied.
- person Asteron Jr   schedule 16.04.2021