Права доступа к файлам в профилях пользователей - PullRequest
3 голосов
/ 18 февраля 2010

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

У меня проблема в том, что ClickOnce перезаписывает app.config при каждом развертывании. Мне известен атрибут configsource, но, насколько я понимаю, целевой файл должен находиться в пути приложения - это означает, что я не могу эффективно контролировать местоположение.

Итак, я создал класс для данных, которые я хочу сохранить, и сериализую / десериализирую их в нужное место и из него. Все это работает хорошо, за исключением того, что если файл не существует, я создаю его (используя XmlSerializer и TextWriter). Проблема здесь в том, что пользователь, который запускает приложение при его создании, становится единственным пользователем, который может получить к нему доступ. У последующих пользователей нет разрешения, если я не предоставлю разрешение более широкой группе AD вручную. Даже это хорошо, за исключением того факта, что я не хочу прикасаться к каждому компьютеру при первой установке.

Так есть ли хороший способ программно устанавливать разрешения при создании файла, или мне следует переосмыслить свой дизайн, потому что я что-то упустил из-за встроенных функций конфигурации?

РЕДАКТИРОВАТЬ: заглянул в Application.CommonAppDataPath, но он поддерживает папку для каждой версии приложения, что означает, что каждое новое развертывание начинается заново.

Ответы [ 2 ]

1 голос
/ 25 февраля 2010

На основании этого ТАК сообщения Я сделал это:

<code></p>

<p>FileSecurity fileSecurity = File.GetAccessControl(file);
fileSecurity.AddAccessRule(new FileSystemAccessRule("Users", 
                                             FileSystemRights.FullControl, 
                                             AccessControlType.Allow));
File.SetAccessControl(file, fileSecurity);</p>

<p>
1 голос
/ 18 февраля 2010

IIRC, Вы можете ссылаться на папку «Все данные приложения пользователя» в приложениях «один раз».

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

...