Права доступа к изолированному хранилищу - PullRequest
1 голос
/ 02 сентября 2011

У меня есть приложение, которое хранит некоторые данные в изолированном хранилище.Данные хранятся в области «Сборка машины», чтобы все пользователи на данном компьютере могли получить доступ к этим данным.

Казалось, что все нормально работает под учетной записью администратора, но как только мы проверили наше приложение под учетной записью гостя, мы столкнулись с ограничениями прав доступа пользователя.Кажется, что изолированное хранилище, являющееся простой папкой, сгенерированной ОС, может иметь некоторые ограничения на доступ пользователей к этой папке.

В моем случае для гостевой учетной записи по умолчанию были установлены разрешения на чтение / запись, но как только мы попытались удалить файл, который был помещен в хранилище под учетной записью администратора, мы столкнулись с исключением, поскольку гостевая учетная запись нене имеет права удалять файлы, созданные другим пользователем.

В результате мы получаем сбой каждый раз, когда гость пытается использовать некоторые функции приложения, требующие удаления файлов, созданных другим пользователем.

Я подумал, что, возможно, я мог бы попытаться проверить, какие разрешения имеет гость, прежде чем приступить к удалению, и предупредить его, что он не может использовать эти функции, поскольку у него недостаточно прав, но поскольку путь кизолированное хранилище генерируется ОС, и нет никакого способа выяснить это (кроме полного обхода файловой системы), поэтому нет способа проверить, какие права имеет гостевая учетная запись.

Возможно, у кого-то есть какие-либо предложения по этому поводу?

1 Ответ

0 голосов
/ 02 сентября 2011

, поскольку ОС генерирует путь к изолированному хранилищу, и найти его невозможно.

Да, но вам придется использовать отражение.Вот что я использую (в данном случае пользовательский магазин, но идея та же самая):

string path;
using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForAssembly())
{
    using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(fileNamePlusExtension, FileMode.Create, isf))
    {
      stream.Write(content, 0, content.Length);
      FieldInfo pi = stream.GetType().GetField("m_FullPath", BindingFlags.Instance | BindingFlags.NonPublic);
      path = pi.GetValue(stream).ToString();
    }
}

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

Возможно, вы сможете создать файл и затем установить разрешения для гостевой учетной записи.

...