Хранение настроек пользователя - PullRequest
2 голосов
/ 04 марта 2009

Environment.SpecialFolder.CommonApplicationData

* возвращает «C: \ Documents and Settings \ All Users \ Application Data» под XP, то есть записываемый для всех пользователей

* возвращает «C: \ ProgramData [MyApp] \» под Vista, и это не доступно для записи обычным пользователям

Теперь, почему я хочу CommonFolder? Потому что администратор установит мою базу данных программного обеспечения на XP (или Vista) под учетной записью администратора, но когда пользователь снова войдет в систему и запустит мое программное обеспечение, текущая учетная запись скажет моему программному обеспечению посмотреть в другом месте, где была установлена ​​база данных: каталог пользователя в документах и ​​настройках ....

поэтому AllUsers (общая папка) является общим для администратора и обычного пользователя без прав администратора.

Это сводит меня с ума: где разместить мою базу данных, чтобы она работала под Vista и XP ????? Спасибо Jonathan

Ответы [ 5 ]

5 голосов
/ 04 марта 2009

Пользовательские настройки должны храниться в папке данных приложения пользователя (Environment.SpecialFolder.ApplicationData), чтобы при входе в систему нескольких пользователей каждый из них получал свои собственные настройки. Создайте базу данных user-settings по умолчанию для программы в основной папке программы во время установки и скопируйте ее в папку пользователя при первом запуске программы пользователем (вы будете знать, что это первый раз, потому что файл db не существует пока).

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

1 голос
/ 04 марта 2009

Вы используете установщик для запуска администратора? Если это так, вы должны иметь возможность использовать параметры установщика, а также надлежащий сборочный / исполняемый манифест, чтобы приложение (независимо от того, кто его запускает) получило надлежащие разрешения для обновления / изменения файлов в ProgramData, специфичных для их приложения.

Я запускаю аналогичный сценарий (установка приложения в Program Files, установка общего хранилища данных в ProgramData, конфигурация пользователя, сохранение файлов сохранения в C: \ Users), манифест и настройки в WiX installer позволил этому работать.

1 голос
/ 04 марта 2009

Можете ли вы использовать IsolatedStorageFile.GetMachineStoreForApplication и IsolatedStorageFile.GetUserStoreForApplication методы?

Приношу свои извинения, если я неправильно понял ваш вопрос.

1 голос
/ 04 марта 2009

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

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

В соответствии с этой политикой безопасность в папке ProgramData следующим образом:

Система: полный контроль над файлами и Администраторы папок: полный доступ поверх файлов и папок Создатель / Владелец: Полный контроль над файлами и папками Пользователи: чтение только для файлов, но может создавать новые папки и файлы

Что это делает? позволяет любому пользователю читать и создавать папка / файл в любом месте внутри Папка ProgramData, но пользователь может изменять только те файлы, которые были созданный из их учетной записи пользователя; Oни не может изменить файлы, созданные из другая учетная запись пользователя.

Единственное исключение, о котором я знаю это политика c: \ users \ public папка, которая предназначена для пользователи хранить документы и такие, что они хотят, чтобы их читали и писали.

С здесь. Похоже, у кого-то еще была такая же проблема.

0 голосов
/ 04 марта 2009

где разместить мою базу данных, чтобы она работала под Vista и XP

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

возвращает "C: \ ProgramData [MyApp] \" [ исправленная опечатка ] под Vista, и это не доступно для записи обычным пользователям

Не в соответствии с быстрой проверкой в ​​ACL здесь (на самом деле Win2k8):

PS C:\ProgramData> get-acl . | select -expand access

[...]

FileSystemRights  : ReadAndExecute, Synchronize
AccessControlType : Allow
IdentityReference : BUILTIN\Users
IsInherited       : False
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None

<b>FileSystemRights  : Write</b>
AccessControlType : Allow
IdentityReference : BUILTIN\Users
IsInherited       : False
InheritanceFlags  : ContainerInherit
PropagationFlags  : None

Обратите внимание на последнее, что касается ACE, обычные пользователи имеют доступ для записи, но только к папкам и содержащимся в них файлам, не к файлам непосредственно в C: \ ProgramData.

Однако, если пользователь создает папку в C: \ ProgramData, другие пользователи не будут иметь прав на запись.

Ответ: Создайте папку под ProgramData для вашей базы данных и установите ACL для этой папки, чтобы предоставить всем пользователям доступ для чтения и записи к файлам в этой папке.

...