Пользователи / общедоступные, недоступные для записи в Windows 7: куда мне поместить пользовательские данные?

Я начал становиться хорошим гражданином, ответив на этот вопрос здесь:

Совместимость доменов: куда следует записывать общие данные?

Моя пользовательская информация теперь записана в переменную окружения:

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)

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

В Windows XP при подключении к домену проблем нет; этот файл определяется и записывается правильно. На windows 7 программа не работает. Каталог пользователя теперь C: \ ProgramData \ MyFolder, и эта папка создается только для чтения (гений! Почему бы не сделать ее только для чтения, в конце концов, никто не хочет писать в папку CommonApplicationData!).

Какой каталог мне следует использовать? Эта «специальная папка» предназначена для той задачи, которая мне нужна, но похоже, что эта папка не может быть записана пользователем.

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


person mmr    schedule 06.07.2009    source источник


Ответы (1)


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

person Pavel Minaev    schedule 06.07.2009
comment
хорошо, как мне использовать FileSystemAccessRule для всех пользователей? Вызов функции, похоже, принимает только определенный идентификатор пользователя. - person mmr; 07.07.2009
comment
Этим идентификатором пользователя может быть «Все», т.е. группа, к которой принадлежит любой пользователь Windows. Однако вам не следует жестко кодировать имя, поскольку оно зависит от локализованных версий Windows. Вместо этого используйте что-то вроде этого: SecurityIdentifier every = new SecurityIdentifier (WellKnownSidType.WorldSid, null); FileSystemAccessRule rule = новое FileSystemAccessRule (все, ...); - person Pavel Minaev; 08.07.2009